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()
相关推荐
青椒大仙KI116 分钟前
24/9/19 算法笔记 kaggle BankChurn数据分类
笔记·算法·分类
^^为欢几何^^10 分钟前
lodash中_.difference如何过滤数组
javascript·数据结构·算法
豆浩宇10 分钟前
Halcon OCR检测 免训练版
c++·人工智能·opencv·算法·计算机视觉·ocr
Narutolxy13 分钟前
Python 单元测试:深入理解与实战应用20240919
python·单元测试·log4j
浅念同学26 分钟前
算法.图论-并查集上
java·算法·图论
何不遗憾呢35 分钟前
每日刷题(算法)
算法
Amo Xiang35 分钟前
2024 Python3.10 系统入门+进阶(十五):文件及目录操作
开发语言·python
立志成为coding大牛的菜鸟.39 分钟前
力扣1143-最长公共子序列(Java详细题解)
java·算法·leetcode
鱼跃鹰飞39 分钟前
Leetcode面试经典150题-130.被围绕的区域
java·算法·leetcode·面试·职场和发展·深度优先
liangbm31 小时前
数学建模笔记——动态规划
笔记·python·算法·数学建模·动态规划·背包问题·优化问题