python机器学习算法--Kmeans算法

1.k-means介绍

k-平均聚类的目的:把n 个点的训练样本分到k 个聚类中,使得每个点都属于离它最近的均值和聚类中心所对应的聚类,也就是中心点,以之作为聚类的标准。聚类基本上就是依照"物以类聚"的方式,也可以想成,相似的东西有着相似的特征,所以相同种类的数据应该是非常类似。k-means主要是计算同一类的数据,计算出该类的平均中心点位置,k-means与kNN是没有任何关系的两种算法。

python 复制代码
import matplotlib.pyplot as plt 
import numpy as np
x=np.array([[1,1],[1.1,1.1],[1.2,1.2],[2,2],[2.1,2.1],[2.2,2.2]])
y=[1,1,1,0,0,0]
plt.axis([0,3,0,3])
plt.plot(x[:3,0],x[:3,1],'yx')
plt.plot(x[3:0],x[3:1],'g.')
plt.ylabel('H cm')
plt.xlabel('W cm')
plt.legend(('A','B'),loc='upper right')
plt.show()

KMeans函数在使用时有两个地方需要注意:

· 需要在初始的时候告诉系统有几类数据。比如,有两种数据就需要写成KMeans(n_clusters=2)。

· 训练的时候kmeans.fit(X)不需要标签Y。

python 复制代码
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import KMeans
from sklearn import metrics

x = np.array([[1, 1], [1.1, 1.1], [1.2, 1.2], [2, 2], [2.1, 2.1], [2.2, 2.2]])
y = [1, 1, 1, 0, 0, 0]
kmeans = KMeans(n_clusters=2, random_state=0)
kmeans = kmeans.fit(x)

print('集群中心的坐标', kmeans.cluster_centers_)
print('预测', kmeans.predict(x))
print('实际', y)
print('预测[1,1],[2.3,2.1]:', kmeans.predict([[1, 1], [2.3, 2.1]]))

plt.axis([0, 3, 0, 3])
plt.plot(x[:3, 0], x[:3, 1], 'yx')  # 显示第一类的数据点
plt.plot(x[3:, 0], x[3:, 1], 'g.')   # 显示第二类的数据点
plt.plot(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], 'ro')  # 显示集群中心
plt.title('K-Means Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.xticks(())
plt.yticks(())
plt.show()

一个demo

python 复制代码
from sklearn import datasets
from sklearn.cluster import KMeans
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
iris=datasets.load_iris()
iris_x_train,iris_x_test,iris_y_train,iris_y_test=train_test_split(iris.data,iris.target,test_size=0.2)
kmeans=KMeans(n_clusters=3)
kmeans.fit(iris_x_train)
print('实际',iris_y_train)
predicted_labels=kmeans.labels_
print('预测',predicted_labels)
iris_y_train[iris_y_train==1]==2
iris_y_train[iris_y_train==2]==1
iris_y_train[iris_y_train==0]==0
print('调整后的标签',iris_y_train)
score=accuracy_score(iris_y_train,predicted_labels)
print('准确率:{:.2f}'.format(score))
python 复制代码
from sklearn import datasets
from sklearn.cluster import KMeans
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt 
iris=datasets.load_iris()
iris_x_train,iris_x_test,iris_y_train,iris_y_test=train_test_split(iris.data,
iris.target,test_size=0.2,random_state=42)
kmeans=KMeans(n_clusters=3)
kmeans.fit(iris_x_train)
y_predict=kmeans.predict(iris_x_train)
iris_y_train[y_predict == 0] = 2
iris_y_train[y_predict == 1] = 1
iris_y_train[y_predict == 2] = 0
print("调整后的标签", iris_y_train)
score=accuracy_score(iris_y_train,y_predict)
print('准确率:{:.2f}'.format(score))
x1=iris_x_train[:,0]
y1=iris_x_train[:,1]
plt.scatter(x1,y1,c=y_predict,cmap='viridis')
centers=kmeans.cluster_centers_
plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)
plt.show()
相关推荐
NeDon20 小时前
[OJ]数据结构:移除链表元素
c语言·数据结构·算法·链表
刃神太酷啦20 小时前
C++ list 容器全解析:从构造到模拟实现的深度探索----《Hello C++ Wrold!》(16)--(C/C++)
java·c语言·c++·qt·算法·leetcode·list
承渊政道20 小时前
一文彻底搞清楚链表算法实战大揭秘和双向链表实现
c语言·数据结构·算法·leetcode·链表·visual studio
9527(●—●)20 小时前
windows系统python开发pip命令使用(菜鸟学习)
开发语言·windows·python·学习·pip
sali-tec20 小时前
C# 基于halcon的视觉工作流-章69 深度学习-异常值检测
开发语言·图像处理·算法·计算机视觉·c#
森叶20 小时前
手搓一个 Windows 注册表清理器:从开发到 EXE 打包全流程
windows·python
努力写代码的熊大20 小时前
手撕AVL树:从理论到实践,掌握插入操作的完美平衡
算法
JoannaJuanCV21 小时前
自动驾驶—CARLA仿真(25)synchronous_mode demo
人工智能·机器学习·自动驾驶·carla
骚戴21 小时前
大语言模型(LLM)进阶:从闭源大模型 API 到开源大模型本地部署,四种接入路径全解析
java·人工智能·python·语言模型·自然语言处理·llm·开源大模型