码迷,mamicode.com
首页 > 其他好文 > 详细

中国mooc北京理工大学机器学习第一周(一)

时间:2017-05-18 01:11:01      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:bsp   strip   can   init   plt   nes   str   ++   rip   

从今天开始跟着北理工的老师走一遍sklearn,在这里做笔记。

 

一、聚类

1、K-Means方法

先贴代码,所有数据的下载地址:http://pan.baidu.com/s/1hrO5NW4

 

    import numpy as np
    from sklearn.cluster import KMeans
       
    def loadData(filePath):#def一个读取数据的loadData
        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)#进行聚类,贴标签,label=4
        expenses = np.sum(km.cluster_centers_,axis=1)#expenses是每一个聚类容器的sum
        CityCluster = [[],[],[],[]]#这里的类别大于等于n_clusters
        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])

 

 1   sklearn.cluster.KMeans(
 2     n_clusters=8,#你想分类的种类
 3       init=k-means++,#初始簇中心的获取方法    
 4       n_init=10,#获取初始簇中心的更迭次数,为了弥补初始质心的影响,算法默认会初始10个质心,实现算法,然后返回最好的结果。 
 5       max_iter=300,#最大迭代次数 
 6       tol=0.0001,#容忍度,即kmeans运行准则收敛的条件 
 7       precompute_distances=auto, #是否需要提前计算距离
 8       verbose=0, 
 9       random_state=None, 
10       copy_x=True, 
11      n_jobs=1, #并行设置
12      algorithm=auto‘ #kmeans的实现算法
13      )

 

总结一下:先读取数据集合 ==>  构造聚类容器(分几类) ==>  进行聚类贴标签 ==> 根据贴好的标签放到对应的聚类容器 ==> 计算中心值

暂时先了解这么多,结合andrew和林轩田的机器学习课程知道,这里Kmeans方法整个聚类的计算是先随机选定聚类中心,不断迭代修正,求向量和最小。

目前主要先掌握如何使用sklearn。

2、DBSCAN聚类算法

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法。

由名字就可以知道他可以算出哪些离群点是噪音

他和kmeans一个显著的区别是他自动设置聚类的多少,需要人为调的参数是设定核心点的范围。

      2_1、数据的读取与预处理

    import numpy as np
    import sklearn.cluster as skc
    from sklearn import metrics
    import matplotlib.pyplot as plt  
    mac2id=dict()#字典
    onlinetimes=[]#数组
    f=open(TestData.txt,encoding=utf-8)
    for line in f:
        mac=line.split(,)[2]  #A417314EEA7B
        onlinetime=int(line.split(,)[6]) #15
        starttime=int(line.split(,)[4].split( )[1].split(:)[0])#22
        if mac not in mac2id:
            mac2id[mac]=len(onlinetimes)#如果没有出现过,直接append
            onlinetimes.append((starttime,onlinetime))
        else:
            onlinetimes[mac2id[mac]]=[(starttime,onlinetime)]#出现过会替代(不太理解这,可能是数据的特点吧)
    real_X=np.array(onlinetimes).reshape((-1,2))#改成两列(-1的含义是任意行)

   2_2、DBSCAN聚类

   X=real_X[:,0:1]#按照原形式读取第一列
    print(X)
     
    db=skc.DBSCAN(eps=0.01,min_samples=20).fit(X)#进行聚类,eps:半径,min_samples:数据的个数
    labels = db.labels_#贴标签与取标签
     
    print(Labels:)
    print(labels)
    raito=len(labels[labels[:] == -1]) / len(labels)#-1为噪声点
    print(Noise raito:,format(raito, .2%))
     
    n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)   #set的作用是去重复,然后减去噪声
     
    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()))#flatten方法:高维array和matrix转化成1维。list不可用。
         
    plt.hist(X,20)
    plt.show()

总结一下是这个课程老师上课讲的很简要,聚类一共讲了大概30分钟,但是很多细节需要自己下功夫百度,很不错的课程。

之前学过andrew和林轩田的课程,结合这个看发现自己有很多没掌握的地方。

抽时间回去看看。

以上:)

 

 

中国mooc北京理工大学机器学习第一周(一)

标签:bsp   strip   can   init   plt   nes   str   ++   rip   

原文地址:http://www.cnblogs.com/deleteme/p/6870248.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!