快捷搜索:  汽车  科技

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

kmeans算法适用场景,Kmeans异常检测教程(1)

目录
  • 介绍
  • 教程
  • 总结
介绍

异常检测被数据科学家和机器学习工程师广泛使用,用于检测与数据的主要、广义部分最不同的数据。

异常检测是很有用的。例如,你可以查看业务产品网站上的事件数据,可能会看到一些异常的事件,或者其他一些使用案例包括欺诈检测和网络安全。异常检测还可以用在其他领域。如医疗保健领域,可以从异常检测中获取诸多好处。机器学习算法会让异常检测变得更容易。

下面,我将给出一个Python教程,介绍如何通过聚类使用无监督学习来自动检测异常。你可以使用此代码并将其应用于你的数据集,以便进行后续操作。

教程

kmeans算法适用场景,Kmeans异常检测教程(2)

无监督聚类模型

本教程将包括导入一些重要的库、预处理数据、转换数据、创建聚类模型、利用主成分分析(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()

kmeans算法适用场景,Kmeans异常检测教程(3)

是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()

kmeans算法适用场景,Kmeans异常检测教程(4)

然后,你将执行以下操作:

求出每个点与最近质心之间的距离。

  • 最大距离被视为异常

用簇的视图显示异常:

  • 红色=异常
  • 蓝色=正常

#求点间距离的函数 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()

kmeans算法适用场景,Kmeans异常检测教程(5)

总结

如你所见,使用机器学习算法,你可以创建一个数据科学模型,该模型可以保存并用于将数据分组为异常或正常数据。使用异常检测有几个用例,这些用例可以从检测异常的算法方法中获益:

  • 欺诈检测
  • 垃圾邮件检测
  • 网络安全
  • 医学
  • 顾客行为

猜您喜欢: