无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记

文章原创,最近更新:2018-04-20

1.无监督学习-聚类
2.聚类之K-Means+31省市居民家庭消费调查
3.聚类之Dbscan+学生上网时间分布聚类实例
Python机器学习应用-北京理工大学-礼欣、嵩天

前言:
这个课程比较一般,主讲人感觉对着PPT念了一遍,对概念分析也不怎么清晰.不推荐看整一套视频.

1.无监督学习-聚类

1.1无监督学习的目标

无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第1张图片

1.2聚类的定义

无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第2张图片

1.3欧氏距离

欧氏距离是最常用的一种距离度量方法,源于欧氏空间中两点的距离,也就是我们初中学的两点之间的距离计算方式.

无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第3张图片

1.4曼哈顿距离

曼哈顿距离类似与空间直角坐标系中,两个点x轴的距离+y轴的距离.


无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第4张图片

1.5马式距离

马式距离相对自己而言比较陌生.


无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第5张图片

补充内容:
链接内容详细补充了马氏距离:
https://blog.csdn.net/panglinzhuo/article/details/77801869

1.6夹角余弦

这是高中常见的数学公式,

无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第6张图片

1.7Sklearn VS. 聚类

无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第7张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第8张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第9张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第10张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第11张图片

1.8降维

无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第12张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第13张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第14张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第15张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第16张图片

2.聚类之K-Means+31省市居民家庭消费调查

2.1K-Means方法

无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第17张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第18张图片

2.2K-Means的应用

无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第19张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第20张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第21张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第22张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第23张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第24张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第25张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第26张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第27张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第28张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第29张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第30张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第31张图片

拓展&改进

无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第32张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第33张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第34张图片

1.利用loadData方法读取数据
2.创建实例
3.调用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+学生上网时间分布聚类实例

3.1DBSCAN密度聚类

无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第35张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第36张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第37张图片

设置MinPts的点≤5个

3.2DBSCAN密度算法流程:

无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第38张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第39张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第40张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第41张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第42张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第43张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第44张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第45张图片

3.3DBSCAN的应用实例:

无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第46张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第47张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第48张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第49张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第50张图片

采用欧氏距离的方式

建立工程,导入sklearn相关包

import numpy as np
import sklearn.cluster as skc
from sklearn import metrics
import matplotlib.pyplot as plt
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第51张图片

读入数据并进行处理

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))
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第52张图片

上网时间聚类,创建DBSCAN算法实例,并进行训练,获得标签

X=real_X[:,0:1]

db=skc.DBSCAN(eps=0.01,min_samples=20).fit(X)
labels = db.labels_
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第53张图片

输出标签,查看结果

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()))
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第54张图片
plt.hist(X,24)
plt.show()
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第55张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第56张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第57张图片
无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记_第58张图片

上网时间大多聚集在22:00和23:00

你可能感兴趣的:(无监督学习+聚类之K-Means+聚类之Dbscan-学习笔记)