zoukankan      html  css  js  c++  java
  • 中国mooc北京理工大学机器学习第一周(一)

    从今天开始跟着北理工的老师走一遍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和林轩田的课程,结合这个看发现自己有很多没掌握的地方。

    抽时间回去看看。

    以上:)

     

  • 相关阅读:
    求最大子数组02
    求最大子数组
    第3周学习进度
    四则运算3
    第2周学习进度
    构建之法阅读笔记02
    四则运算2及单元测试
    四则运算1
    第1周学习进度
    构建之法阅读笔记01
  • 原文地址:https://www.cnblogs.com/deleteme/p/6870248.html
Copyright © 2011-2022 走看看