福州模板建站定制网站,ui是网站建设吗,怒江州城乡建设局网站,天津建行网站1. 有监督学习和无监督学习
在机器学习算法中#xff0c;常把算法分为有监督学习和无监督学习两种。他们之间的区别主要在于输入数据集类型和学习目标。
#xff08;1#xff09;有监督学习#xff1a;训练输入的数据需要带有标签#xff0c;以便算法能够学习输入和输出…1. 有监督学习和无监督学习
在机器学习算法中常把算法分为有监督学习和无监督学习两种。他们之间的区别主要在于输入数据集类型和学习目标。
1有监督学习训练输入的数据需要带有标签以便算法能够学习输入和输出之间的映射关系有监督学习的目标是通过对训练数据的学习实现对未知数据的预测和分类。
2无监督学习训练数据不需要标签算法只能使用输入数据进行学习目标是找到输入数据之间的相似性和区别。
这里我们要介绍的Kmeans聚类算法就是一种无监督学习算法输入的训练数据不需要类别标签而是通过计算数据点之间的相似性来对数据进行分类。 2. Kmeans算法原理
K-means聚类算法的原理是
1 首先随机选择K个点作为初始的聚类中心
2然后计算每个点到聚类中心的距离将每个点分配到离它最近的聚类中心所在的簇中
3对于每个簇计算每个簇所有点的平均值并将其作为新的聚类中心点
4重复这个过程直到聚类中心不再发生变化或者达到预设的迭代次数。 这个算法的目标是最小化每个聚类内的距离和即使得每个点与其所在聚类中心的距离之和最小。它尝试使得每个聚类尽可能小并且不同聚类之间的距离尽可能大。 K值如何确定
K值是一个重要的超参数表示簇的个数即要把数据分为几个类别。
K值的确定可以通过以下几种方法
肘部法肘部法所使用的聚类评价指标为数据集中所有样本点到其簇中心的距离之和的平方。
轮廓系数法轮廓系数是一种非常常用的聚类效果评价指标。
可视化数据最常用最简单的方法是可视化数据然后观察出聚类聚成几类比较合适。
交叉验证计算不同k值下KMeans算法的BIC和AIC值BIC或AIC值越小选择该k值。 3. 运行代码
import matplotlib.pyplot as plt
import sklearn
import numpy as npfrom sklearn.datasets import make_blobs
from sklearn.cluster import KMeansdef main():# step1: 首先用sklearn包生成训练集模板这里的簇心为4# 生成合成数据# n_samples是待生成的样本总数# centers 表示要生成的样本中心类别数或是确定的中心点数量blobs make_blobs(n_samples200, random_state1, centers4)X_blobs blobs[0] # 提取特征数据Y_blobs blobs[1] # 类别plt.figure(1)plt.scatter(X_blobs[:, 0], X_blobs[:, 1], cY_blobs)# step2# step3: 聚类kmeans KMeans(n_clusters4, initk-means, n_init10, max_iter300, random_stateNone, )kmeans.fit(X_blobs)# step4: plotx_min, x_max X_blobs[:, 0].min() - 0.5, X_blobs[:, 0].max() 0.5y_min, y_max X_blobs[:, 1].min() - 0.5, X_blobs[:, 1].max() 0.5# step5xx, yy np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))Z kmeans.predict(np.c_[xx.ravel(), yy.ravel()])Z Z.reshape(xx.shape)plt.figure(2)plt.clf()plt.imshow(Z, interpolationhermite, extent(xx.min(), xx.max(), yy.min(), yy.max()), cmapplt.cm.winter,aspectauto, originlower)plt.plot(X_blobs[:, 0], X_blobs[:, 1], w., markersize5)# 用红色的x表示簇中心centroids kmeans.cluster_centers_plt.scatter(centroids[:, 0], centroids[:, 1], markerx, s150, linewidths3, colorr, zorder10)plt.xlim(x_min, x_max)plt.ylim(y_min, y_max)plt.xticks()plt.yticks()plt.show()if __name__ __main__:main()