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
    评论
K-means聚类是一种常见的无监督机器学习算法,用于将数据集中的点划分为K个簇。K是指聚类的数量,算法的目标是最小化每个点到其所属簇中心(质心)的距离的平方和。 当处理经纬度数据进行聚类时,需要注意经纬度是球面坐标,如果直接使用普通的欧几里得距离计算可能会得到不准确的结果,因为地球是曲面。在实际应用中,可以使用Haversine距离公式来计算地球上两点之间的距离,以获得更准确的聚类结果。 以下是使用Python实现经纬度数据的K-means聚类的一个简要例子: ```python import numpy as np from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler from math import radians, cos, sin, asin, sqrt def haversine(lon1, lat1, lon2, lat2): # 将十进制度数转换为弧度 lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2]) # Haversine公式计算两点间距离 dlon = lon2 - lon1 dlat = lat2 - lat1 a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2 c = 2 * asin(sqrt(a)) r = 6371 # 地球平均半径,单位为公里 return c * r # 假设data是一个包含经纬度的numpy数组,其中第一列是经度,第二列是纬度 data = np.array([ [116.46, 39.92], [117.19, 39.13], # ... 更多经纬度数据 ]) # 使用Haversine公式计算距离 X = np.array([haversine(row[0], row[1], data[:, 0], data[:, 1]) for row in data]) # 数据标准化 scaler = StandardScaler() X_scaled = scaler.fit_transform(X.reshape(-1, 1)) # 应用K-means算法 kmeans = KMeans(n_clusters=3, random_state=0).fit(X_scaled) # 输出聚类结果 print(kmeans.labels_) # 聚类中心点 print(kmeans.cluster_centers_) ``` 在实际应用中,需要根据数据的具体情况调整K值,即聚类的数量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值