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和林轩田的课程,结合这个看发现自己有很多没掌握的地方。

    抽时间回去看看。

    以上:)

     

  • 相关阅读:
    windows系统切换jdk,修改java_home无效情况
    Cannot instantiate interface org.springframework.context.ApplicationListener
    MySQL分组查询获取每个学生前n条分数记录(分组查询前n条记录)
    ASP.NET Web API 使用Swagger生成在线帮助测试文档,支持多个GET
    EF TO MYSQL 无法查询中文的解决方法
    HttpWebRequest post请求获取webservice void数据信息
    This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms. 此实现不是 Windows 平台 FIPS 验证的加密算法的一部分 解决方案
    MySQL 5.7.13解压版安装记录 mysql无法启动教程
    C# udpclient 发送数据断网后自动连接的方法
    汽车XX网站秒杀抢购代码
  • 原文地址:https://www.cnblogs.com/deleteme/p/6870248.html
Copyright © 2011-2022 走看看