第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 慕课Python机器学习应用-代码实现(详细注释+数据集)

慕课Python机器学习应用-代码实现(详细注释+数据集)

时间:2018-09-08 23:19:00

相关推荐

慕课Python机器学习应用-代码实现(详细注释+数据集)

课程链接:Python机器学习应用_北京理工大学_中国大学MOOC(慕课)

学习和实现的算法有KmeansDBSCAN,数据集是自己在网上搜集的,在我的资源区提供免费下载。

Kmeans算法:

1、数据介绍(city.txt,资源区提供免费下载):

现有1999年全国31个省份城镇居民家庭平均每人全年消费性支出的八个主要变量数据,这八个变量分别是:

食品、衣着、家庭设备用品及服务、医疗保健、交通和通讯、娱乐教育文化服务、居住以及杂项商品和服务。

利用已有数据,对31个省份进行聚类。

2、实验目的:

通过聚类(技术路线:sklearn.cluster.Kmeans),了解1999年各个省份的消费水平在国内的情况

3、算法介绍:

k-means算法以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。

其处理过程如下:

1.随机选择k个点作为初始的聚类中心;

2.对于剩下的点,根据其与聚类中心的距离,将其归入最近的簇

3.对每个簇,计算所有点的均值作为新的聚类中心

4.重复2、3直到聚类中心不再发生改变

其他:

因初始的k个点是随机选择的,所以每次的运行结果不一定相同

可以修改参数中的k值以及CityCluster中的列表数,本算法k=3

关于一些相关包的介绍:

 NumPy是Python语言的一个扩充程序库。支持高级大量的维度数组与矩阵运算,此外也针对数组

运算提供大量的数学函数库。

 使用sklearn.cluster.KMeans可以调用K-means算法进行聚类

import numpy as npfrom sklearn.cluster import KMeansdef loadData(filePath):# 打开文件流,如果没有第二个参数,会报编码错误fr = open(filePath, 'r+', encoding='utf_8')# 按行读取整个文件,返回的是列表lines = fr.readlines()# 将读入的数据进行拆分,分为数据和城市名retData = []retCityName = []# 遍历列表for line in lines:# 去除字符串首尾的空格或者回车,并使用“,”进行分割items = line.strip().split(",")# 每行的开头是城市名称retCityName.append(items[0])# 将数据组合成一个列表,并且强制转换类型为float浮点型retData.append([float(items[i]) for i in range(1, len(items))])# 返回城市数据(二维列表)和城市名(一维列表)return retData, retCityName# 加载数据,创建K-means算法实例,并进行训练,获得标签if __name__ == '__main__':# 调用加载数据的方法,获取城市数据以及城市名称data, cityName = loadData('city.txt')# 创建指定簇数量的KMeans对象实例km = KMeans(n_clusters=3)# 加载数据,进行训练,获得标签,总共是3个簇,就是3个标签,将给31个数据,每个数据都打上0-2的标签label = km.fit_predict(data)# print(label)# 计算出每一个簇形成的所有的行内的数据,计算出该簇内的数据的和# axis为1是压缩成列,即将每一行的元素相加,将矩阵压缩为一列# cluster_centers_:求每簇的质心坐标,即每个簇中求各列的平均值expenses = np.sum(km.cluster_centers_, axis=1)# print(km.cluster_centers_)# print(expenses)# 总共是3个标签,3个集合,按照打上的标签将城市名进行分类CityCluster = [[], [], []]# 遍历所有的标签,并将对应的城市根据标签加上对应的簇中for i in range(len(cityName)):CityCluster[label[i]].append(cityName[i])# 遍历所有的簇中心的数量,总共就只有3个,进行打印输出for i in range(len(CityCluster)):print("Expenses:%.2f" % expenses[i])print(CityCluster[i])

DBSCA算法:(后续会有详细注释)

import numpy as npimport sklearn.cluster as skcfrom sklearn import metricsimport matplotlib.pyplot as pltmac2id = 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))X = real_X[:, 0:1]db = skc.DBSCAN(eps=0.01, min_samples=20).fit(X)labels = db.labels_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()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。