Python每日一记19>>>无监督学习K-Means聚类

令人惊讶的是,尽管我们的世界几乎被数据所淹没,但很大一部分是未经标注未被整理过的,这意味着这些数据对于大多数目前的监督式学习来说是不可用的。
以上,反映出监督学习的局限性也突出无监督学习的重要性和发展前景,即便如此,目前而言,任何无监督学习的准确性和有效性也达不到监督学习的效果。
在介绍无监督学习之前,先介绍数据预处理。
1、数据预处理
通用代码
from sklearn.preprocessing import Minmaxscaler
k=Minmaxscaler()
k.fit(x1)
k.transform(x2)
基于上,我们可以用其他预处理函数替代Minmaxscaler,如StandarScaler,RobusrScaler,Normalizer等。更多或者函数详情情自行网上查阅资料。
2、无监督学习
实验证明,数据预处理对于无监督学习算法的有效性提高有一定作用,准确的说,数据预处理对大部分的算法均有提高得分的效用,毕竟一个好的数据集,分析起来更加容易。
2.1、主成分分析PCA
简称PCA,是一种旋转数据集的方法,旋转后的数据特征无相关性,原数数据的特征减少而已,这样有助于简单化数据集,但同时保留原数据的大部分特性。
在这里插入图片描述
在这里插入图片描述
我们发现数据集的特征数量从50变成了5,这是我们设置n_components=5,另外我们可以设置n_components=0.9,即保留原始数据的90%信息,我们发现特征数为3个则保留了原始数据的90%信息。
在这里插入图片描述
在这里插入图片描述
其次我们可以查看主成分的情况:
在这里插入图片描述
在这里插入图片描述
我们发现主成分的维度是3行50列,表示3个主成分,分别与50个特征的函数关系矩阵。具体的不需要了解,我们只需要会降维,并且利用降维后的数据进行其他算法操作即可。
另外我们可以在降维中进行白化处理:pca=PCA(n_components=0.9,whiten=True)
白化可以让样本特征之间相关性降低,且所有特征具有相同的方差。经过白化后的数据,进行其他算法的效果更好。
2.2、非负矩阵分解NMF
类似于PCA,也是用于降维,但是NMF只能适用与非负值,也不能设置n_components=0.9等浮点数。
因此PCA是更加好用的降维方式。
2.3、K-Means聚类
在这里插入图片描述
在这里插入图片描述
一共分成了四类,我们用set()得到非重复值
进行预测得到给定的值属于【0】类
值得注意的是,给定的数据一定要是二维数据[[2,6,8,9,7]],否则不能进行预测,会报错,即不能[2,6,8,9,7]。
其他的聚类算法包括,凝聚聚类和DBSCAN算法,并不常用,需要的可以自行去查找资料。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个问题的解决方案和前一个问题的解决方案类似,只需要将Excel表格的读取替换为从IDLE中输入数据即可。 代码示例: ```python import numpy as np from sklearn.cluster import KMeans import matplotlib.pyplot as plt # 从IDLE中输入数据 data = [] for i in range(10): x, y = input(f"Enter the coordinates of point {i+1}: ").split() data.append([float(x), float(y)]) # 将输入数据转换为NumPy数组 data = np.array(data) # 提取第二列和第三列的前六个数据作为聚类中心 centers = data[0:6, :] # 使用KMeans算法进行聚类 kmeans = KMeans(n_clusters=6, init=centers).fit(data) # 将聚类后的点模糊判断到前六个点上某个聚类中心 labels = [] for i in range(len(data)): label = kmeans.predict(data[i, :].reshape(1, -1))[0] center = centers[label] if np.linalg.norm(data[i, :] - center) < 0.1: labels.append(label) else: labels.append(-1) # 根据聚类的类别给出对应表格中第四列和第五列的数据 column4 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] column5 = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19] result = np.zeros((10, 5)) result[:, 0] = np.arange(1, 11) result[:, 1:3] = data result[:, 3] = column4 result[:, 4] = column5 result = result.astype(str) for i in range(len(result)): if labels[i] != -1: result[i, 3] = np.mean(result[result[:, 0] != str(i+1), 3][labels == labels[i]]) result[i, 4] = np.mean(result[result[:, 0] != str(i+1), 4][labels == labels[i]]) # 可视化数据 colors = ['blue', 'green', 'red', 'cyan', 'magenta', 'yellow'] plt.scatter(data[:, 0], data[:, 1], c=[colors[label] if label != -1 else 'black' for label in labels]) plt.show() # 输出聚类结果 print("ID\tX\tY\tColumn4\tColumn5") for i in range(len(result)): print("\t".join(result[i, :])) ``` 需要注意的是,这个代码中没有使用pandas库读取Excel表格,而是手动构造了一个结果数组来存储聚类结果,并且输出结果时也没有使用pandas库的格式化输出。另外,这个代码中输入数据的数量是固定的,如果需要处理不同数量的输入数据,需要对代码进行相应修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值