無監(jiān)督學(xué)習(xí)+聚類之K-Means+聚類之Dbscan-學(xué)習(xí)筆記

文章原創(chuàng),最近更新:2018-04-20

1.無監(jiān)督學(xué)習(xí)-聚類
2.聚類之K-Means+31省市居民家庭消費調(diào)查
3.聚類之Dbscan+學(xué)生上網(wǎng)時間分布聚類實例
Python機器學(xué)習(xí)應(yīng)用-北京理工大學(xué)-禮欣、嵩天

前言:
這個課程比較一般,主講人感覺對著PPT念了一遍,對概念分析也不怎么清晰.不推薦看整一套視頻.

1.無監(jiān)督學(xué)習(xí)-聚類

1.1無監(jiān)督學(xué)習(xí)的目標

1.2聚類的定義

1.3歐氏距離

歐氏距離是最常用的一種距離度量方法,源于歐氏空間中兩點的距離,也就是我們初中學(xué)的兩點之間的距離計算方式.

1.4曼哈頓距離

曼哈頓距離類似與空間直角坐標系中,兩個點x軸的距離+y軸的距離.


1.5馬式距離

馬式距離相對自己而言比較陌生.


補充內(nèi)容:
鏈接內(nèi)容詳細補充了馬氏距離:
https://blog.csdn.net/panglinzhuo/article/details/77801869

1.6夾角余弦

這是高中常見的數(shù)學(xué)公式,

1.7Sklearn VS. 聚類

1.8降維

2.聚類之K-Means+31省市居民家庭消費調(diào)查

2.1K-Means方法

2.2K-Means的應(yīng)用

拓展&改進


1.利用loadData方法讀取數(shù)據(jù)
2.創(chuàng)建實例
3.調(diào)用Kmeans()、fit_predict()方法進行計算


def loadData(filePath):
    fr = open(filePath,'r+')
    lines = fr.readlines()
    retData = []
    retCityName = []
    for line in lines:
        items = line.strip().split(",")
        retCityName.append(items[0])
        retData.append([float(items[i]) for i in range(1,len(items))])
    return retData,retCityName

if __name__ == '__main__':
    data,cityName = loadData('city.txt')
    km = KMeans(n_clusters=4)
    label = km.fit_predict(data)
    expenses = np.sum(km.cluster_centers_,axis=1)
    #print(expenses)
    CityCluster = [[],[],[],[]]
    for i in range(len(cityName)):
        CityCluster[label[i]].append(cityName[i])
    for i in range(len(CityCluster)):
        print("Expenses:%.2f" % expenses[i])
        print(CityCluster[i])


3.聚類之Dbscan+學(xué)生上網(wǎng)時間分布聚類實例

3.1DBSCAN密度聚類


設(shè)置MinPts的點≤5個

3.2DBSCAN密度算法流程:

3.3DBSCAN的應(yīng)用實例:


采用歐氏距離的方式

建立工程,導(dǎo)入sklearn相關(guān)包

import numpy as np
import sklearn.cluster as skc
from sklearn import metrics
import matplotlib.pyplot as plt

讀入數(shù)據(jù)并進行處理

mac2id=dict()
onlinetimes=[]
f=open('TestData.txt',encoding='utf-8')
for line in f:
    mac=line.split(',')[2]
    onlinetime=int(line.split(',')[6])
    starttime=int(line.split(',')[4].split(' ')[1].split(':')[0])
    if mac not in mac2id:
        mac2id[mac]=len(onlinetimes)
        onlinetimes.append((starttime,onlinetime))
    else:
        onlinetimes[mac2id[mac]]=[(starttime,onlinetime)]
real_X=np.array(onlinetimes).reshape((-1,2))

上網(wǎng)時間聚類,創(chuàng)建DBSCAN算法實例,并進行訓(xùn)練,獲得標簽

X=real_X[:,0:1]

db=skc.DBSCAN(eps=0.01,min_samples=20).fit(X)
labels = db.labels_

輸出標簽,查看結(jié)果

print('Labels:')
print(labels)
raito=len(labels[labels[:] == -1]) / len(labels)
print('Noise raito:',format(raito, '.2%'))

n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)

print('Estimated number of clusters: %d' % n_clusters_)
print("Silhouette Coefficient: %0.3f"% metrics.silhouette_score(X, labels))

for i in range(n_clusters_):
    print('Cluster ',i,':')
    print(list(X[labels == i].flatten()))
plt.hist(X,24)
plt.show()

上網(wǎng)時間大多聚集在22:00和23:00

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容