kmeans算法适用场景,Kmeans异常检测教程
kmeans算法适用场景,Kmeans异常检测教程#以k为3预测簇 data['cluster']=kmeans[3].predict(data) data['principal_feature1']=data[0] data['principal_feature2']=data[1] #绘制簇及其各自的数据量 data['cluster'].value_counts() #用两个主成分分析特征绘制不同的簇图 fig ax=plt.subplots() colors={0:'red' 1:'blue' 2:'green' 3:'pink' 4:'black'} ax.scatter(data['principal_feature1'] data['prin
- 介绍
- 教程
- 总结
异常检测被数据科学家和机器学习工程师广泛使用,用于检测与数据的主要、广义部分最不同的数据。
异常检测是很有用的。例如,你可以查看业务产品网站上的事件数据,可能会看到一些异常的事件,或者其他一些使用案例包括欺诈检测和网络安全。异常检测还可以用在其他领域。如医疗保健领域,可以从异常检测中获取诸多好处。机器学习算法会让异常检测变得更容易。
下面,我将给出一个Python教程,介绍如何通过聚类使用无监督学习来自动检测异常。你可以使用此代码并将其应用于你的数据集,以便进行后续操作。
教程本教程将包括导入一些重要的库、预处理数据、转换数据、创建聚类模型、利用主成分分析(PCA)和elbow图,以及最终隔离异常数据点。无监督聚类是机器学习算法的一个方面,它没有标签,如0或1。然而,数据点共享相似的属性,可以归类为相同或相似的东西。
下面的代码包括读取数据、缩放数据并将其转换为最终模型的预处理步骤。有几个关键库要导入,有些库很可能你已经使用过了,比如pandas和matplotlib。以下是本文教程的第一部分:
#导入库
fromsklearn.preprocessingimportStandardScaler
fromsklearn.decompositionimportPCA
frommatplotlibimportpyplotasplt
fromsklearn.clusterimportKMeans
fromsklearnimportpreprocessing
importpandasaspd
importnumpyasnp
importseaborn
#读入你的数据
data=pd.read_csv(‘your_file_path.csv’)
#缩放数据
scaler=preprocessing.StandardScaler()
scaled_df=scaler.fit_transform(data)
data=pd.DataFrame(scaled_df)
pca=PCA(n_components=2)
#转换数据
data=pca.fit_transform(data)
scaled=scaler.fit_transform(data)
data=pd.DataFrame(scaled)
本教程的下一部分是确定k-means机器学习算法的最佳k值,它由elbow图方法确定。实际上,你需要查看图形化的线在何处发生明显的断裂。将最佳k值指定给k-means算法参数。在这种情况下,我们看到3是数据的最佳k值。
#创建一个肘部图来确定k
n_cluster=range(1 7)
kmeans=[KMeans(n_clusters=i).fit(data)foriinn_cluster]
scores=[kmeans[i].score(data)foriinrange(len(kmeans))]
fig ax=plt.subplots()
ax.plot(n_cluster scores)
plt.show()
是k的最佳量。
本教程的下一部分是使用k-means聚类算法来预测新数据。你还将看到各个簇的值计数。最后,你将在给簇着色后绘制它们。
#以k为3预测簇
data['cluster']=kmeans[3].predict(data)
data['principal_feature1']=data[0]
data['principal_feature2']=data[1]
#绘制簇及其各自的数据量
data['cluster'].value_counts()
#用两个主成分分析特征绘制不同的簇图
fig ax=plt.subplots()
colors={0:'red' 1:'blue' 2:'green' 3:'pink' 4:'black'}
ax.scatter(data['principal_feature1'] data['principal_feature2'] c=data["cluster"].apply(lambdax:colors[x]))
plt.show()
然后,你将执行以下操作:
求出每个点与最近质心之间的距离。
- 最大距离被视为异常
用簇的视图显示异常:
- 红色=异常
- 蓝色=正常
#求点间距离的函数
defgetDistance(data model):
distance=pd.Series()
foriinrange(0 len(data)):
k=np.array(data.loc[i])
j=model.cluster_centers_[model.labels_[i]-1]
distance.set_value(i np.linalg.norm(k-j)
returndistance
outliers_fraction=0.02
dist=getDistance(data kmeans[3])
number_of_outliers=int(outliers_fraction*len(dist))
th=dist.nlargest(number_of_outliers).min()
#分配
data['anomaly']=(distance>=th).astype(int)
#红色是异常
fig ax=plt.subplots()
colors={0:'blue' 1:'red'}
ax.scatter(data['principal_feature1'] data['principal_feature2'] c=data["anomaly"].apply(lambdax:colors[x]))
plt.show()
如你所见,使用机器学习算法,你可以创建一个数据科学模型,该模型可以保存并用于将数据分组为异常或正常数据。使用异常检测有几个用例,这些用例可以从检测异常的算法方法中获益:
- 欺诈检测
- 垃圾邮件检测
- 网络安全
- 医学
- 顾客行为