算法模型之分类模型(无监督学习K-means)

1. 什么是无监督学习
    没有目标值的时候,采用无监督学习。因为不存在学习的对象。
2. 无监督学习包含算法
    1. 聚类算法:
        K-means(K均值聚类)
    2. 降维:
        PCA
3.K-means的原理(K-means的算法步骤)
    1. 首先,随机寻找K个点(这里的K是想要分成的份数)
    2. 第二步,把所有点,向这K个点进行求取距离,距离近的点,标成不同的颜色
    3. 第三步,把所有颜色相同的点,进行求取均值,形成一个新的K个中心
    4. 第四步,重复第二个步骤,直到前后两次的聚类中心重合或者相差不大的时候,停止聚类
4. K-means的API
    sklearn.cluster.KMeans(n_clusters=8, init='k-means++',max_iter)
        n_clusters:开始聚类的中心点,也就是K值的个数
        init:初始化方法,也就是开始选取聚类点的方法,默认为'k-means++'
        max_iter: 迭代次数的限定
5. K-means模型的评估方法“轮廓系数法”
    1. 方法详解:
        SCi = (b_i - a_i) / max(b_i, a_i)
        a_i代表的是一个类别中的一个样本和另一个类别中样本的距离的平均值
        b_i代表的是一个类别中的一个样本和该类别中样本的距离的平均值
        当 b_i >> a_i 时,SCi ≈ 1
        当 b_i >> a_i 时,SCi ≈ -1
        因此我们可以认为,当SCi接近1时,聚类的效果越好,越能达到“高内聚,低耦合”现象。
        因此我们可以认为,当SCi接近-1时,聚类的效果越差,越达不到“高内聚,低耦合”现象。
    2. 轮廓系数法API:sklearn.metrics.silhouette_score(data, lambel)
        data: 就是我们的数据集
        lambel: 就是预测得到的结果

注意,无监督学习一般不会用到数据集划分train_test_split函数

对以下数据进行划分无监督学习划分:

城市名称 城市代码 交通健康指数 交通延时指数 高延时运行时间占比 拥堵路段里程比 平均车速
中山市 442000 0.743635484 1.595913978 53.13612903 1.679193548 28.26258065
临沂市 371300 0.759006452 1.568817204 48.29747312 1.571397849 29.85091398
兰州市 620100 0.740470968 1.508978495 37.99290323 1.838548387 27.91311828
南宁市 450100 0.757883871 1.478924731 30.01784946 1.26811828 28.51892473
南昌市 360100 0.760412903 1.499193548 36.55903226 1.618172043 30.64521505
南通市 320600 0.78006129 1.373225806 17.29397849 0.641290323 36.31129032
厦门市 350200 0.765535484 1.486290323 35.03580645 1.602096774 33.4133871
台州市 331000 0.7707 1.489193548 38.17193548 1.016774194 30.18037634
合肥市 340100 0.757322581 1.496451613 39.33693548 1.406505376 29.20225806
哈尔滨市 230100 0.753622581 1.565913978 48.02849462 1.943172043 28.65483871
嘉兴市 330400 0.778045161 1.384086022 21.68435484 0.524193548 30.47215054
大连市 210200 0.740941935 1.621451613 59.94623656 1.829623656 29.05290323
太原市 140100 0.751303226 1.55155914 39.24698925 2.113602151 31.8844086
常州市 320400 0.765151613 1.435107527 30.19688172 0.69311828 31.96709677
徐州市 320300 0.755609677 1.477150538 38.26166667 1.288817204 29.62478495
惠州市 441300 0.744277419 1.552365591 47.93887097 1.660053763 28.59102151
无锡市 320200 0.753158065 1.419032258 30.645 1.255806452 33.03451613
昆明市 530100 0.745764516 1.540537634 43.90688172 1.972311828 28.21462366
泉州市 350500 0.785393548 1.388602151 24.01424731 0.840483871 33.10064516
济南市 370100 0.744958065 1.68483871 60.75241935 2.133709677 28.18612903
温州市 330300 0.750845161 1.514569892 46.59478495 1.290322581 25.28204301
潍坊市 370700 0.778345161 1.538602151 49.19354839 0.705322581 28.54231183
烟台市 370600 0.767974194 1.528817204 47.67021505 0.73672043 30.69768817
珠海市 440400 0.753825806 1.534086022 42.47311828 1.471774194 34.25344086
石家庄市 130100 0.757196774 1.512365591 38.79924731 1.51311828 31.24752688
福州市 350100 0.750977419 1.59655914 50.62741935 1.679892473 28.88032258
绍兴市 330600 0.760645161 1.492311828 40.2327957 1.067311828 27.47043011
贵阳市 520100 0.736306452 1.561021505 43.6377957 3.067634409 31.57268817
金华市 330700 0.769812903 1.368602151 16.93553763 0.632473118 29.11575269
长春市 220100 0.737064516 1.667473118 65.68096774 2.363655914 27.95241935

 代码:

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
from sklearn.preprocessing import StandardScaler
import pandas as pd


# 1、数据获取
path = "E:\Desktop\二线城市交通大数据(整理版本).xlsx"
data = pd.read_excel(path)
data = data.iloc[:, 3:]
data.head()
# 2、特征工程 标准化
transfer = StandardScaler()
data = transfer.fit_transform(data)
# 3、K-means聚类
estimator = KMeans(n_clusters=3)
estimator.fit(data)
y_predict = estimator.predict(data)
# 4、K-means 模型评估方法:轮廓系数
silhouette_score(data, y_predict)

输出结果:

0.31123484705638604

学习地址:

黑马程序员3天快速入门python机器学习_哔哩哔哩_bilibili

你可能感兴趣的:(机器学习,kmeans,聚类,无监督学习,机器学习,sklearn)