机器学习sklearn-KNN
目录
1 概述
2 sklearn中的聚类算法
2.1 聚类算法的模型评估指标
2.2 重要参数init & random_state & n_init 初始化质心
2.3 重要参数max_iter & tol:让迭代停下来
3 Kmeans做矢量量化
1 概述
![](/assets/blank.gif)
2 sklearn中的聚类算法
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
进行kmeans之后数据分布
2.1 聚类算法的模型评估指标
![](/assets/blank.gif)
![](/assets/blank.gif)
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
from sklearn.metrics import silhouette_score #所有样本轮廓系数均值
from sklearn.metrics import silhouette_samples #每一个样本的轮廓系数#自己创建数据集
X,y=make_blobs(n_samples=500,n_features=2,centers=4,random_state=1)#规定randomstate是让数据稳定#基于这个分布进行聚类
#kmeans 并不需要建立模型或预测结果 只需要fit就可以得到聚类结果
#kmeans 有接口predict和fit_predict 表示学习数据X并对X的类别进行预测
#但得到结果后一般不调用predict 直接fit之后调用熟悉labels_一模一样
#一般当数据量大时,才使用predict
n_cluster=3
cluster=KMeans(n_clusters=n_cluster,random_state=1).fit(X)
#查看聚好的类别 每个样本对应的类
y_pred=cluster.labels_
#查看质心
centroid=cluster.cluster_centers_
#查看总距离平方和
inertia=cluster.inertia_
# print(centroid)
# print(inertia)color = ["red","pink","orange"]
label=['cluster1','cluster2','cluster3']
fig,ax1=plt.subplots(1)for i in range(len(color)):ax1.scatter(X[y_pred==i,0],X[y_pred==i,1],marker='o',#点的形状s=8,#点的大小label=label[i],c=color[i])#画出质心
ax1.scatter(centroid[:,0],centroid[:,1],marker='x',s=15,c='black')plt.legend(loc=0)
# plt.show()#查看轮廓系数
print(silhouette_score(X,y_pred))
print(silhouette_samples(X,y_pred))
分析n_cluster=4时,分簇效果
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np
from sklearn.metrics import silhouette_score #所有样本轮廓系数均值
from sklearn.metrics import silhouette_samples #每一个样本的轮廓系数"""基于轮廓系数调整n_cluster求每一个聚出来的类的轮廓系数各个类之间轮廓系数的对比聚类后图像的分布情况绘制学习曲线
"""
#创建数据
X,y=make_blobs(n_samples=500,n_features=2,centers=4,random_state=1)#规定randomstate是让数据稳定n_clusters=4
fig,(ax1,ax2)=plt.subplots(1,2)
fig.set_size_inches(18,7)#设置画布尺寸
#第一个图是轮廓系数图像(横向条形图) 横坐标为轮廓系数 纵坐标为每一个样本
ax1.set_xlim([-0.1,1])#设置轮廓系数范围
ax1.set_ylim([0,X.shape[0]+(n_clusters+1)*10])#加上后面的数是为了显示时有一定的间隔
clusterer=KMeans(n_clusters=n_clusters,random_state=10).fit(X)
cluster_labels=clusterer.labels_ #聚类后每一个样本对应的类silhouette_avg = silhouette_score(X, cluster_labels)#平均轮廓系数
print("For n_clusters ={} The average silhouette_score is :{}".format(n_clusters, silhouette_avg))
#每个样本的轮廓系数 用作横坐标
sample_silhouette_values = silhouette_samples(X, cluster_labels)
y_lower=10 #设置y轴初始取值 避免贴着x轴开始画图#对每一个簇进行循环
for i in range(n_clusters):#从每个样本的轮廓系数取出第i个簇的轮廓系数ith_cluster_silhouette_values = sample_silhouette_values[cluster_labels == i]ith_cluster_silhouette_values.sort()size_cluster_i=ith_cluster_silhouette_values.shape[0] #查看这个簇里有多少样本y_upper=y_lower+size_cluster_i #这个簇在y轴的上界color=cm.nipy_spectral(float(i)/n_clusters) #输入任意一个浮点数 会返回该浮点数对应的函数 保证不同簇的颜色不同#fill_between是一个让范围中的柱状图都统一颜色的函数#fill_betweenx的范围在纵坐标上 fill_betweeny的范围在横坐标上#fill_betweenx 纵坐标下限 纵坐标上限 x取值 颜色ax1.fill_betweenx(np.arange(y_lower,y_upper),ith_cluster_silhouette_values,facecolor=color,alpha=0.7)#为每个簇的轮廓系数写上编号 并让编号显示在中间位置ax1.text(-0.05,y_lower + 0.5 * size_cluster_i, str(i))#更新y_lower 保证每一个簇直接存在间隔y_lower = y_upper + 10ax1.set_title("The silhouette plot for the various clusters.")
ax1.set_xlabel("The silhouette coefficient values")
ax1.set_ylabel("Cluster label")#把轮廓系数均值用虚线形式放入图中
ax1.axvline(x=silhouette_avg, color="red", linestyle="--")
ax1.set_yticks([])
ax1.set_xticks([-0.1, 0, 0.2, 0.4, 0.6, 0.8, 1])#画第二个图
colors = cm.nipy_spectral(cluster_labels.astype(float) / n_clusters)#利用分簇结果取n_clusters个颜色
centers = clusterer.cluster_centers_
ax2.scatter(X[:, 0], X[:, 1],marker='o',s=8,c=colors)#画分簇图
ax2.scatter(centers[:, 0], centers[:, 1], marker='x',c="red", alpha=1, s=200) #画质心
ax2.set_title("The visualization of the clustered data.")
ax2.set_xlabel("Feature space for the 1st feature")
ax2.set_ylabel("Feature space for the 2nd feature")#设置整张图片标题
plt.suptitle(("Silhouette analysis for KMeans clustering on sample data ""with n_clusters = {}".format(n_clusters)),fontsize=14, fontweight='bold')plt.show()
包装成循环之后查看n_cluster取不同值下的轮廓系数,并以图片形式显示。
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics import silhouette_samples, silhouette_score
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np#自己创建数据集
X,y=make_blobs(n_samples=500,n_features=2,centers=4,random_state=1)#规定randomstate是让数据稳定for n_clusters in [2, 3, 4, 5, 6, 7]:n_clusters = n_clustersfig, (ax1, ax2) = plt.subplots(1, 2)fig.set_size_inches(18, 7)ax1.set_xlim([-0.1, 1])ax1.set_ylim([0, X.shape[0] + (n_clusters + 1) * 10])clusterer = KMeans(n_clusters=n_clusters, random_state=10).fit(X)cluster_labels = clusterer.labels_silhouette_avg = silhouette_score(X, cluster_labels)print("For n_clusters =", n_clusters,"The average silhouette_score is :", silhouette_avg)sample_silhouette_values = silhouette_samples(X, cluster_labels)y_lower = 10for i in range(n_clusters):ith_cluster_silhouette_values = sample_silhouette_values[cluster_labels == i]ith_cluster_silhouette_values.sort()size_cluster_i = ith_cluster_silhouette_values.shape[0]y_upper = y_lower + size_cluster_icolor = cm.nipy_spectral(float(i) / n_clusters)ax1.fill_betweenx(np.arange(y_lower, y_upper), ith_cluster_silhouette_values, facecolor=color, alpha=0.7)ax1.text(-0.05, y_lower + 0.5 * size_cluster_i, str(i))y_lower = y_upper + 10ax1.set_title("The silhouette plot for the various clusters.")ax1.set_xlabel("The silhouette coefficient values")ax1.set_ylabel("Cluster label")ax1.axvline(x=silhouette_avg, color="red", linestyle="--")ax1.set_yticks([])ax1.set_xticks([-0.1, 0, 0.2, 0.4, 0.6, 0.8, 1])colors = cm.nipy_spectral(cluster_labels.astype(float) / n_clusters)ax2.scatter(X[:, 0], X[:, 1], marker='o', s=8, c=colors)centers = clusterer.cluster_centers_# Draw white circles at cluster centersax2.scatter(centers[:, 0], centers[:, 1], marker='x',c="red", alpha=1, s=200)ax2.set_title("The visualization of the clustered data.")ax2.set_xlabel("Feature space for the 1st feature")ax2.set_ylabel("Feature space for the 2nd feature")plt.suptitle(("Silhouette analysis for KMeans clustering on sample data ""with n_clusters = %d" % n_clusters),fontsize=14, fontweight='bold')
plt.show()
2.2 重要参数init & random_state & n_init 初始化质心
2.3 重要参数max_iter & tol:让迭代停下来
3 Kmeans做矢量量化
我们需要随机选取64个样本点作为随机质心,计算原数据中每个样本到它们的距离来找出离每个样本最近的随机质心,然后用每个样本所对应的随机质心来替换原本的样本。两种状况下,我们观察图像可视化之后的状况,以查看图片信息的损失。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.metrics import pairwise_distances_argmin #对两个序列中的点进行距离匹配的函数
from sklearn.datasets import load_sample_image #导入图片数据的库
from sklearn.utils import shuffle #打乱有序序列#导入数据
china = load_sample_image("china.jpg")
# print(china.shape)
newimage = china.reshape((427 * 640,3))
# print(newimage.shape)
color_num=pd.DataFrame(newimage).drop_duplicates().shape
# print(color_num)#图片可视化 imshow必须导入三维图片
# plt.figure(figsize=(20,8),dpi=80)
# plt.imshow(china)
# plt.show()n_clusters = 64
#plt.imshow在浮点数上表现很好 将china的数据归一化为浮点数
china = np.array(china, dtype=np.float64) / china.max()
#把图像格式转换为矩阵格式
w, h, d = original_shape = tuple(china.shape) #取出长 宽 通道数
assert d==3 #确保d=3 即3通道
image_array=np.reshape(china,(w*h,d))# 第一个参数为改变结构的对象 第二个参数为改变后的结构#对数据进行矢量量化 此时数据量较大 先抽取一部分数据来进行拟合 再让全数据按照拟合出来的质心进行聚类
image_array_sample = shuffle(image_array, random_state=0)[:1000]#随机抽1000个质心
kmeans = KMeans(n_clusters=n_clusters, random_state=0).fit(image_array_sample)
labels = kmeans.predict(image_array)#按照找出的质心对所有数据进行聚类
image_kmeans = image_array.copy()#拷贝 避免破坏原有数据
#用64个质心代替所有数据
for i in range(w*h):image_kmeans[i] = kmeans.cluster_centers_[labels[i]]
#还原为imshow可以使用的形式
# print(pd.DataFrame(image_kmeans).drop_duplicates().shape) #查看替换是否成功
image_kmeans = image_kmeans.reshape(w,h,d)#随机选取64个质心
centroid_random = shuffle(image_array, random_state=0)[:n_clusters]
#计算第二个参数每一个样本到第一个参数每一个样本的距离 返回第一个参数中距离第二个参数最近的index 形状和第二个参数一致
labels_random = pairwise_distances_argmin(centroid_random,image_array,axis=0)
image_random = image_array.copy()
for i in range(w*h):image_random[i] = centroid_random[labels_random[i]]image_random = image_random.reshape(w,h,d)fig,(ax1,ax2,ax3)=plt.subplots(1,3)
fig.set_size_inches(18, 7)ax1.axis('off')
ax1.set_title('Original image (96,615 colors)')
ax1.imshow(china)ax2.axis('off')
ax2.set_title('Quantized image (64 colors, K-Means)')
ax2.imshow(image_kmeans)ax3.axis('off')
ax3.set_title('Quantized image (64 colors, Random)')
ax3.imshow(image_random)plt.show()
机器学习sklearn-KNN相关推荐
- [机器学习-sklearn] KNN(k近邻法)学习与总结
KNN 学习与总结 引言 一,KNN 原理 二,KNN算法介绍 三, KNN 算法三要素 1 距离度量 2. K 值的选择 四, KNN特点 KNN算法的优势和劣势 KNN算法优点 KNN算法缺点 五 ...
- 机器学习实战-KNN算法-20
机器学习实战-KNN算法-鸢尾花分类 # 导入算法包以及数据集 from sklearn import neighbors from sklearn import datasets from skle ...
- python机器学习-sklearn挖掘乳腺癌细胞(五)
python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...
- 《菜菜的机器学习sklearn课堂》聚类算法Kmeans
聚类算法 聚类算法 无监督学习与聚类算法 sklearn中的聚类算法 KMeans KMeans是如何工作的 簇内误差平方和的定义和解惑 sklearn.cluster.KMeans 重要参数 n_c ...
- 《菜菜的机器学习sklearn课堂》逻辑回归
逻辑回归 概述:名为"回归"的分类器 为什么需要逻辑回归? sklearn中的逻辑回归 linear_model.LogisticRegression 二元逻辑回归的损失函数 损失 ...
- 机器学习Sklearn学习总结
Sklearn学习资料推荐: sklearn中文文档 机器学习入门必看:使用 scikit-learn 构建模型的通用模板 机器学习神器Scikit-Learn保姆教程! python机器学习_FF_ ...
- 机器学习:KNN完成英文手语分类
机器学习:KNN完成英文手语分类 先来看一下标准的英文手语: 本文KNN网络识别部分效果:(当然只挑选了几个字母): 完成的主要流程为: 通过mediapipe处理kaggle上的一个图片数据集,获取 ...
- 机器学习Sklearn Day4
04 sklearn中的降维算法PCA和SVD 1概述 从什么叫"维度"说开来 sklearn中的降维算法 2 PCA与SVD 2.1降维究竟是怎样实现? 2.2 重要参数n_c ...
- 机器学习之KNN结合微信机器人实现手写数字识别终极API
机器学习之KNN结合微信机器人实现手写数字识别终极API 手写数字识别 功能概述 实现步骤 结果展示 改进之处和TIPS 手写数字识别 功能概述 微信机器人接收到的手写数字图片,传送给已经经过机器学习 ...
- 机器学习之KNN算法
机器学习之KNN算法 1 KNN算法 2 预测电影类型例子 3 sklearn实现KNN算法 4 总结 前言:主要介绍KNN算法的基本原理,公式.sklearn实现knn算法,以及knn的优点缺点使用 ...
最新文章
- 如何让自己时刻冷静的方法_4个方法,教你如何真正爱自己
- windows 下使用composer
- Windows 08 R2_创建AD DS域服务(图文详解)
- Office 插件开发和部署的总结
- [导入]给家人补补钙!双莲炖腔骨
- chrome浏览器遭eFast浏览器恶意软件删除取代
- RESTful Request:GET/PUT/DELETE/POST/HEAD/OPTIONS
- 对近来安庆天气特征的总结(夏季)
- 东财《组织行为学X》综合作业
- 【AAAI-2019】论文整理(清单)
- CAJ阅读器相关问题
- Python 实现王者荣耀自动刷金币
- 服务器不能创建对象教务系统,[转]解决强智教务系统非IE下无法创建对象错误...
- vi 的完整指令说明 -- YenYen 整理
- 自制p站小姐姐图片返回api.
- blender 绘制离散顶点, SMPL骨架绘制
- 全球最大成人网站公布年度榜单!原来lsp最爱看的是这种片……
- 电子商务法律规范与伦理道德(七)
- 这5个设计素材网站,绝对不能错过
- STM32连YL69土壤湿度传感器以及内部温度传感器采集数据并在LCD上显示