Udacity-机器学习入门-聚类

点与聚类匹配(K均值算法)

步骤:

  1. 分配

将点按照离聚类中心的距离分好

这里写图片描述

  1. 优化

移动使聚类中心到这些点的总二次距离降到最小

这里写图片描述

3.重复上述步骤

这里写图片描述

可视化工具中来看具体操作:

随机放中心,对点按距离分类

这里写图片描述

移动中心至其点的总二次距离最小的位置,再次对点分类

这里写图片描述

再次移动中心至点的总二次距离最小的位置

这里写图片描述

SKlearn Clustering

Method name —— K-Means

注意:必须在一开始就表明要查找的聚类数(最具挑战性的工作)

k-means文档

需要注意的参数:

  • n_clusters(聚类数量,默认为8)
    根据自己的需要反复调整(基本需要调整)最重要的参数

  • max_iter=300
    在查找聚类时,需要进行迭代,将各个点分配到矩心,然后移动矩心,然后重新分配这些点,重新移动矩心。max_iter表示进行迭代的次数,300一般足够了。

  • n_init=10 控制算法初始化的次数,提出聚类的次数
    k-means聚类有一个挑战——完全取决于初始状况,你有时最终会得到不同的聚类结果,然后,你需要多次重复该算法。尽管任意这些聚类可能都不对,但所有聚类的集合总会有满足你要求的聚类。
    如果觉得你的聚类特别容易出现糟糕或艰难的初始化过程,就需要调整这个参数

class sklearn.cluster.KMeans(n_clusters=8, init=’k-means++’, n_init=10, max_iter=300, tol=0.0001, precompute_distances=’auto’, verbose=0, random_state=None, copy_x=True, n_jobs=1, algorithm=’auto’)

K-均值的局限

  • 同一个训练集训练出的模型总是会预测出同样的结果吗?

    不是
    K-均值是爬山算法,他非常依赖于你的初始聚类中心所处的位置

  • 局部最小值:取决于聚类中心点的最初设定

例子1:

这里写图片描述

在这个例子中,如果你在最初的假设中选择了这三个聚类中心,你将很难离开这些点。

这里写图片描述

因此我们必须意识到,在聚类中,这是一个局部的爬山算法,它可以为你提供一个次优解。如果你对它再次进行拆分,就可以得到更好的解

例子2:

如果以两个聚类中心对这组数据进行初始化处理,这里存不存在一个局部最小值?有没有稳定的解?

这里写图片描述

这里也是存在不好的局部最小值的!!

你可以把这些聚类中心设置的正好位于彼此的上方,分割线如下图所示,所有上方的点与上方的聚类中心相关联,下方的点与下方的聚类中心相关联

这里写图片描述

如果你的越多的聚类中心,就能找到越多的局部最小值

但是特殊的情况其实存在,所以得用这个将算法多次运行

  • 19.你的聚类算法将会用到哪些特征?

    散点图:

这里写图片描述

  • 20.部署聚类

这里写图片描述

代码:

feature_1 = "salary"
feature_2 = "exercised_stock_options"
poi  = "poi"
features_list = [poi, feature_1, feature_2]
data = featureFormat(data_dict, features_list )
poi, finance_features = targetFeatureSplit( data )

from sklearn.cluster import KMeans
import numpy as np 
Kmeans = KMeans(n_clusters=2).fit(finance_features)
pred=Kmeans.predict(finance_features)
  • 21.使用3个聚类特征,有测试点移动到不同的聚类中吗?

这里写图片描述

代码:

feature_1 = "salary"
feature_2 = "exercised_stock_options"
feature_3 = "total_payments"
poi  = "poi"
features_list = [poi, feature_1, feature_2, feature_3]
data = featureFormat(data_dict, features_list )
poi, finance_features = targetFeatureSplit( data )

from sklearn.cluster import KMeans
import numpy as np 
Kmeans = KMeans(n_clusters=2).fit(finance_features)
pred=Kmeans.predict(finance_features)

### in the "clustering with 3 features" part of the mini-project,
### you'll want to change this line to 
### for f1, f2, _ in finance_features:
### (as it's currently written, the line below assumes 2 features)
for f1, f2, f3 in finance_features:
    plt.scatter( f1, f2, f3 )
plt.show()
  • 22.股票期权范围
import numpy as np 
stocklist=[]
for item in data_dict:
    stock = data_dict[item]['exercised_stock_options']
    if stock != 'NaN':
        stocklist.append(stock)

stocklist = np.array(stocklist)
print "max:",np.max(stocklist)
print "min:",np.min(stocklist)

max: 34348384
min: 3285

  • 23.薪酬范围
salarylist=[]
for item in data_dict:
    stock = data_dict[item]['salary']
    if stock != 'NaN':
        salarylist.append(stock)

salarylist = np.array(salarylist)
print "max:",np.max(salarylist)
print "min:",np.min(salarylist)

max: 1111258
min: 477

  • 24.练习: 聚类更改

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值