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()
相关推荐
dinl_vin几秒前
LangChain 系列·(四):RAG 基础——给大模型装上“外脑“
人工智能·算法·langchain
zhangrelay5 分钟前
三分钟云课实践速通--大学物理--python 版
linux·开发语言·python·学习·ubuntu·lubuntu
深念Y16 分钟前
哈希与向量:计算机理解现实的两座桥梁
人工智能·数学·机器学习·向量·hash·哈希·空间
探物 AI26 分钟前
【感知·医学分割】当 YOLOv11 杀入医学赛道:先检测后分割的级联架构
算法·yolo·计算机视觉·架构
djjdjdjdjjdj26 分钟前
如何用参数解构在函数入口处直接提取对象属性
jvm·数据库·python
隔壁大炮32 分钟前
Day06-08.CNN概述介绍
人工智能·pytorch·深度学习·算法·计算机视觉·cnn·numpy
白云千载尽33 分钟前
前馈与反馈——经典控制理论中的基础概念
人工智能·算法
forEverPlume39 分钟前
mysql如何批量增加表的字段_脚本化DDL操作实践
jvm·数据库·python
asdzx6743 分钟前
使用 Python 读取 PDF: 提取文本和图片
开发语言·python·pdf
炽烈小老头1 小时前
【每日天学习一点算法 2026/04/27】缺失的第一个正数
学习·算法