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()
相关推荐
小江的记录本4 分钟前
【Transformer架构】Transformer架构核心知识体系(包括自注意力机制、多头注意力、Encoder-Decoder结构)
java·人工智能·后端·python·深度学习·架构·transformer
7年前端辞职转AI6 分钟前
Python 注释
python·编程语言
xcjbqd09 分钟前
CSS如何给Bootstrap侧边菜单加图标_使用font-awesome结合CSS
jvm·数据库·python
嘻嘻哈哈樱桃11 分钟前
俄罗斯套娃信封问题力扣--354
算法·leetcode·职场和发展
田梓燊12 分钟前
2026/4/12 leetcode 1320
算法·leetcode·职场和发展
j_xxx404_19 分钟前
力扣题型--链表(两数相加|两两交换链表中的节点|重排链表)
数据结构·c++·算法·leetcode·蓝桥杯·排序算法
坐吃山猪27 分钟前
Python09_正则表达式
开发语言·python·正则表达式
AI科技星31 分钟前
v=c 物理理论核心参数转换表达式大全
开发语言·线性代数·算法·数学建模·平面
deephub31 分钟前
从检索到回答:RAG 流水线中三个被忽视的故障点
人工智能·python·大语言模型·向量检索·rag
yiruwanlu33 分钟前
乡村文旅设计师推荐:建筑设计能力筛选要点解析
python·ui