數據挖掘與算法分析概述_第1頁
數據挖掘與算法分析概述_第2頁
數據挖掘與算法分析概述_第3頁
數據挖掘與算法分析概述_第4頁
數據挖掘與算法分析概述_第5頁
已閱讀5頁,還剩225頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、數據挖掘與算法分析概述技術創(chuàng)新,變革未來智慧IT目 錄環(huán)境的安裝與使用基本術語與線性回歸數據挖掘經典算法介紹Python安裝與使用推薦使用 Anaconda + PyCharm/distribution/pycharm/download/#section=windowsPython安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Pyth

2、on安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Pytho

3、n安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝基本術語信息數據知識價值記錄、存儲數據挖掘應用 通常我們把信息轉化為價值,要經歷信息、數據、知識、價值四個層面,數據挖掘就是中間的重要環(huán)節(jié),是從數據中發(fā)現知識的過程。 數據挖掘可以視為機器學習和數

4、據庫的交叉,它主要利用機器學習界提供的技術來分析海量數據,利用數據庫界提供的技術來管理海量數據?;拘g語數據挖掘的用途示例1(關聯(lián)問題): 經常去超市的同學可能會發(fā)現,我們事先在購物清單上列舉好的某些商品可能會被超市阿姨擺放在相鄰的區(qū)域。例如, 面包柜臺旁邊會擺上黃油、面條柜臺附近一定會有老干媽等等。這樣的物品擺放會讓我們的購物過程更加快捷、輕松。那么如何知道哪些物品該擺放在一塊?又或者用戶在購買某一個商品的情況下購買另一個商品的概率有多大?這就要利用關聯(lián)數據挖掘的相關算法來解決。示例2(分類問題): 在嘈雜的廣場上,身邊人來人往。仔細觀察他們的外貌、衣著、言行等我們會不自覺地斷論這個人是新疆

5、人、東北人或者是上海人。又例如,在剛剛結束的2015NBA總決賽中,各類權威機構會大量分析騎士隊與勇士隊的歷史數據從而得出騎士隊或者勇士隊是否會奪冠的結論?;拘g語數據挖掘的用途示例3(聚類問題): ”物以類聚,人以群分“,生活中到處都有聚類問題的影子。假設銀行擁有若干客戶的歷史消費記錄,現在由于業(yè)務擴張需要新增幾款面對不同人群的理財產品,那么如何才能準確的將不同的理財產品通過電話留言的方式推薦給不同的人群?這便是一個聚類問題,銀行一般會將所有的用戶進行聚類,有相似特征的用戶屬于同一個類別,最后將不同理財產品推薦給相應類別的客戶。示例4(回歸問題): 回歸問題或者稱作預測問題同樣也是一個生活中

6、相當接地氣的應用。大家知道,證券公司會利用歷史數據對未來一段時間或者某一天的股票價格走勢進行預測。同樣,房地產商也會根據地域情況對不同面積樓層的房產進行定價預測?;拘g語參考:機器學習,周志華,清華大學出版社編號色澤根蒂敲聲1青綠蜷縮濁響2烏黑蜷縮濁響3青綠硬挺清脆4烏黑稍蜷沉悶數據記錄的集合稱為一個“數據集”。每條記錄是關于一個事件或對象的描述,稱為一個“示例”或“樣本” 。反映事件或對象在某方面的表現或性質的事項,稱為“屬性”或“特征” 。屬性組成的空間,稱為“屬性空間”或“樣本空間”或“輸入空間” 。屬性上的取值,稱為“屬性值” 。關于西瓜的數據信息基本術語參考:機器學習,周志華,清華大

7、學出版社編號色澤根蒂敲聲1青綠蜷縮濁響2烏黑蜷縮濁響3青綠硬挺清脆4烏黑稍蜷沉悶從數據中學得模型的過程稱為“學習”或“訓練”。訓練過程中使用的數據稱為“訓練數據”,其中每一個樣本稱為一個“訓練樣本”,訓練樣本組成的集合稱為“訓練集” 。關于西瓜的數據信息基本術語參考:機器學習,周志華,清華大學出版社編號色澤根蒂敲聲好瓜1青綠蜷縮濁響是2烏黑蜷縮濁響是3青綠硬挺清脆否4烏黑稍蜷沉悶否擁有標記信息的示例稱為“樣例”,所有標記的集合稱為“輸出空間”。若我們預測的是離散值,例如“好瓜”“壞瓜”,此類學習任務稱為“分類”稱為“分類” 。關于西瓜的數據信息若我們預測的是連續(xù)值,例如西瓜成熟度0.95、0.

8、37,此類學習任務稱為 “回歸” ?;拘g語參考:機器學習,周志華,清華大學出版社編號色澤根蒂敲聲好瓜1青綠蜷縮濁響是2烏黑蜷縮濁響是3青綠硬挺清脆否4烏黑稍蜷沉悶否101青綠硬挺清脆否102青綠硬挺濁響否關于西瓜的數據信息學得模型后,使用其進行預測的過程稱為“測試”,被預測的樣本稱為“測試樣本”,測試樣本的集合稱為“測試集”。訓練集:測試集:學得模型適用于新樣本的能力,稱為“泛化”能力。驗證集:驗證集:是模型訓練過程中單獨留出的樣本集,它可以用于調整模型的超參數和用于對模型的能力進行初步評估?;拘g語-公式化表述訓練數據學習算法模型(映射函數)測試數據預測結果訓練數據:編號色澤根蒂敲聲好瓜1

9、青綠蜷縮濁響是2烏黑蜷縮濁響是3青綠硬挺清脆否4烏黑稍蜷沉悶否101青綠硬挺清脆否102青綠硬挺濁響否學習目標:基本術語-一個形象的比喻訓練集驗證集測試集數據集數據課后題模擬考高考課后題+模擬考+高考標簽答案答案答案答案 訓練集:學生的課本,也就是我們的課后題,學生根據課本里的內容來掌握知識。 驗證集:模擬考,通過作業(yè)可以知道對模擬考的掌握情況怎么樣,發(fā)現自己薄 弱部分。 測試集:高考,考的題是平常都沒有見過,考察學生舉一反三的能力。 數據集:課后題,模擬考,高考的總和。 樣 本:所做的每一道題可以看做為一個樣本。 標 簽:題的答案可以看做標簽?;拘g語-一個形象的比喻為什么要測試集?訓練集直

10、接參與了模型調參的過程,顯然不能用來反映模型真實的能力(防止課本死記硬背的學生擁有最好的成績,即防止過擬合)。驗證集參與了人工調參(超參數)的過程,也不能用來最終評判一個模型(刷題庫的學生不能算是學習好的學生)。所以要通過最終的考試(測試集)來考察一個學(模)生(型)真正的能力(進行高考作為最后測試)。為什么要驗證集?開發(fā)模型時總是需要調節(jié)模型配置,比如選擇層數或每層大小(這叫作模型的超參數)。這個調節(jié)過程需要使用模型在驗證數據上的性能作為反饋信號?;拘g語 監(jiān)督學習:根據已有的數據集,知道輸入和輸出結果之間的關系。根據這種已知的關系,訓練得到一個最優(yōu)的模型。也就是說,在監(jiān)督學習中訓練數據既有

11、特征又有標簽,通過訓練,讓機器可以自己找到特征和標簽之間的聯(lián)系,在面對只有特征沒有標簽的數據時,可以判斷出標簽。 無監(jiān)督學習:我們不知道數據集中數據、特征之間的關系(即不知道標簽),而是要根據聚類或一定的模型得到數據之間的關系。 半監(jiān)督學習:一部分數據有標記,一部分數據沒有標記?;拘g語-機器學習的任務類型監(jiān)督學習聚類,就是對大量的未知標注的數據集,按數據的內在相似性將數據集劃分為多個類別,使類別內的數據相似度較大而類別間的數據相似度較小。無監(jiān)督學習:分類回歸分類就是向事物分配標簽,聚類就是將相似的事物放在一起定量輸出稱為回歸,或者說是連續(xù)變量預測;定性輸出稱為分類,或者說是離散變量預測。舉個

12、例子:預測明天的氣溫是多少度,這是一個回歸任務;預測明天是陰、晴還是雨,就是一個分類任務。最簡單的監(jiān)督學習-線性回歸 回歸在數學上來說是給定一個點集,能夠用一條曲線去擬合之,如果這個曲線是一條直線,那就被稱為線性回歸,如果曲線是一條二次曲線,就被稱為二次回歸。Price ($) in 1000sSize in feet2 最簡單的監(jiān)督學習-線性回歸 回歸在數學上來說是給定一個點集,能夠用一條曲線去擬合之,如果這個曲線是一條直線,那就被稱為線性回歸,如果曲線是一條二次曲線,就被稱為二次回歸。Price ($) in 1000sSize in feet2 模型參數最簡單的監(jiān)督學習-線性回歸Size

13、 in feet2 (x)Price ($) in 1000s (y)210446014162321534315852178訓練集模型表達式模型參數如何選擇合適的?最簡單的監(jiān)督學習-線性回歸 損失函數xy最簡單的監(jiān)督學習-線性回歸 損失函數xy最簡單的監(jiān)督學習-線性回歸 損失函數xy模型學習損失函數最小化最簡單的監(jiān)督學習-線性回歸 損失函數最小值計算方法-梯度下降法 梯度的本意是一個向量(矢量),表示某一函數在該點處的方向導數沿著該方向取得最大值,即函數在該點處沿著該方向(此梯度的方向)變化最快,變化率最大(為該梯度的模)梯度的定義梯度的方向是函數增長最快的方向,梯度的反方向是降低最快的方向最

14、簡單的監(jiān)督學習-線性回歸 損失函數最小值計算方法-梯度下降法梯度下降法損失函數:優(yōu)化目標:優(yōu)化步驟:隨機初始化改變減小的值,直至達到極小值點最簡單的監(jiān)督學習-線性回歸 損失函數最小值計算方法-梯度下降法梯度下降法10J(0,1)最簡單的監(jiān)督學習-線性回歸 損失函數最小值計算方法-梯度下降法梯度下降法重復下述公式直到收斂學習率初始值?最簡單的監(jiān)督學習-線性回歸 損失函數最小值計算方法-梯度下降法梯度下降法(學習率的影響)學習率控制著學習的步長學習率太小收斂緩慢學習率太大可能導致震蕩或收斂失敗最簡單的監(jiān)督學習-線性回歸 損失函數最小值計算方法-梯度下降法梯度下降法(初始參數值的影響)01J(0,1

15、)梯度下降法尋找的是局部最優(yōu)并不一定是全局最優(yōu)最簡單的監(jiān)督學習-線性回歸 損失函數最小值計算方法-梯度下降法利用梯度下降法解決線性回歸問題重復下述公式直到收斂梯度下降法線性回歸模型最簡單的監(jiān)督學習-線性回歸 損失函數最小值計算方法-梯度下降法利用梯度下降法解決線性回歸問題同時更新重復下述公式直到收斂最簡單的監(jiān)督學習-線性回歸 損失函數最小值計算方法-梯度下降法利用梯度下降法解決線性回歸問題(for fixed , this is a function of x)(function of the parameters )最簡單的監(jiān)督學習-線性回歸 損失函數最小值計算方法-梯度下降法利用梯度下降法

16、解決線性回歸問題(for fixed , this is a function of x)(function of the parameters )最簡單的監(jiān)督學習-線性回歸 損失函數最小值計算方法-梯度下降法利用梯度下降法解決線性回歸問題(for fixed , this is a function of x)(function of the parameters )最簡單的監(jiān)督學習-線性回歸 損失函數最小值計算方法-梯度下降法利用梯度下降法解決線性回歸問題(for fixed , this is a function of x)(function of the parameters )最簡

17、單的監(jiān)督學習-線性回歸 損失函數最小值計算方法-梯度下降法利用梯度下降法解決線性回歸問題(for fixed , this is a function of x)(function of the parameters )最簡單的監(jiān)督學習-線性回歸 損失函數最小值計算方法-梯度下降法利用梯度下降法解決線性回歸問題(for fixed , this is a function of x)(function of the parameters )最簡單的監(jiān)督學習-線性回歸 損失函數最小值計算方法-梯度下降法利用梯度下降法解決線性回歸問題(for fixed , this is a function

18、of x)(function of the parameters )最簡單的監(jiān)督學習-線性回歸 損失函數最小值計算方法-梯度下降法利用梯度下降法解決線性回歸問題(for fixed , this is a function of x)(function of the parameters )最簡單的監(jiān)督學習-線性回歸 損失函數最小值計算方法-梯度下降法利用梯度下降法解決線性回歸問題(for fixed , this is a function of x)(function of the parameters )最簡單的監(jiān)督學習-線性回歸 損失函數最小值計算方法-梯度下降法利用梯度下降法解決線性

19、回歸問題(for fixed , this is a function of x)(function of the parameters )最簡單的監(jiān)督學習-線性回歸 損失函數最小值計算方法-梯度下降法隨機批梯度下降法(處理大數據問題)重復下述公式直到收斂每次隨機取一部分樣本進行計算最簡單的監(jiān)督學習-線性回歸 多元變量線性回歸。誤差越小越好?欠擬合正常過擬合過小的誤差會導致模型出現過擬合。一元線性回歸-實戰(zhàn) 數據介紹某款產品在某個城市的銷售利潤與城市人口的數據如下:一元線性回歸-實戰(zhàn) 代碼結構def loadDataSet(filename): 加載文件,將feature存在X中,y存在Y中

20、X = Y = with open(filename, rb) as f: for idx, line in enumerate(f): line = line.decode(utf-8).strip() if not line: continue eles = line.split() if idx = 0: numFeature = len(eles) eles = list(map(float, eles) # 將數據轉換成float型 X.append(eles:-1) # 除最后一列都是feature,append(list) Y.append(eles-1) # 最后一列是實際值,

21、同上 return np.array(X), np.array(Y) # 將X,Y列表轉化成矩陣加載數據一元線性回歸-實戰(zhàn) 代碼結構定義模型函數def h(theta, X): 定義模型函數 return np.dot(X, theta) # 此時的X為處理后的X一元線性回歸-實戰(zhàn) 代碼結構定義損失函數def J(theta, X, Y): 定義代價函數 m = len(X) return np.sum(np.dot(h(theta,X)-Y).T, (h(theta,X)-Y)/(2 * m)而即一元線性回歸-實戰(zhàn) 代碼結構定義定義梯度下降公式def bgd(alpha, maxloop,

22、epsilon, X, Y): 定義梯度下降公式,其中alpha為學習率控制步長,maxloop為最大迭代次數,epsilon為閾值控制迭代(判斷收斂) m, n = X.shape # m為樣本數,n為特征數,在這里為2 theta = np.zeros(2, 1) # 初始化參數為零 count = 0 # 記錄迭代次數 converged = False # 是否收斂標志 cost = np.inf # 初始化代價為無窮大 costs = # 記錄每一次迭代的代價值 thetas = 0: theta0, 0, 1: theta1, 0 # 記錄每一輪theta的更新 while cou

23、nt = maxloop: if converged: break # 同步更新theta count = count + 1 theta = theta - alpha / (1.0 * m) * np.dot(X.T, (h(theta, X) - Y) # 一起計算 thetas0.append(theta0) thetas1.append(theta1) cost = J(theta, X, Y) # 更新當前cost costs.append(cost) # 如果收斂,則不再迭代 if cost epsilon: converged = True return theta, cost

24、s, thetas一元線性回歸-實戰(zhàn) 代碼結構X, Y = loadDataSet(./data/ex1.txt)m, n = X.shapeX = np.concatenate(np.ones(m,1), X), axis=1) # 將第一列為1的矩陣,與原X相連alpha = 0.02 # 學習率maxloop = 1500 # 最大迭代次數epsilon = 0.01 # 收斂判斷條件result = bgd(alpha, maxloop, epsilon, X, Y)theta, costs, thetas = result # 最優(yōu)參數保存在theta中,costs保存每次迭代的代價

25、值,thetas保存每次迭代更新的theta值# 到此,參數學習出來了,模型也就定下來了,若要預測新的實例,進行以下即可# Y_predict = h(theta, X_predict)# 以下為訓練集的預測值XCopy = X.copy()XCopy.sort(0) # axis=0 表示列內排序yHat = h(theta, XCopy)# 繪制回歸直線plt.xlabel(u城市人口(萬)plt.ylabel(u利潤(萬元)plt.plot(XCopy:,1, yHat,color=r)plt.scatter(X:,1.flatten(), Y.T.flatten()plt.show()

26、一元線性回歸-實戰(zhàn) 代碼結構利用sklearn機器學習庫classsklearn.linear_model.LinearRegression(fit_intercept=True,normalize=False,copy_X=True,n_jobs=None) fit_intercept : 默認為True,是否計算該模型的截距。如果使用中心化的數據,可以考慮設置為False,不考慮截距。注意這里是考慮,一般還是要考慮截距normalize: 默認為false. 當fit_intercept設置為false的時候,這個參數會被自動忽略。如果為True,回歸器會標準化輸入參數:減去平均值,并且除

27、以相應的二范數。copy_X : 默認為True, 否則X會被改寫n_jobs: int 默認為1. 當-1時默認使用全部CPUs一元線性回歸-實戰(zhàn) 代碼結構利用sklearn機器學習庫可用的methods: fit(X,y,sample_weight=None) X: array, 稀疏矩陣 n_samples,n_features y: array n_samples, n_targets sample_weight: 權重 array n_samples 根據數據學習參數get_params(self, deep=True)返回初始化設置的參數一元線性回歸-實戰(zhàn) 代碼結構利用sklear

28、n機器學習庫可用的methods: predict(self, X)score(self, X, y, sample_weight=None)source預測數據評估預測分數1 - u/vu= (y_true - y_pred) * 2).sum() v= (y_true - y_true.mean() * 2).sum()一元線性回歸-實戰(zhàn) 代碼結構利用sklearn機器學習庫屬性: coef_ : array, shape (n_features, ) or (n_targets, n_features)intercept_ : array coef_ intercept_ 一元線性回歸-

29、實戰(zhàn) 代碼結構利用sklearn機器學習庫X, Y = loadDataSet(./data/ex1.txt)print(X.shape)print(Y.shape)reg = LinearRegression().fit(X, Y)print(reg.get_params()print(reg.coef_)print(ercept_)print(reg.predict(np.array(500)(97, 1)(97, 1)copy_X: True, fit_intercept: True, n_jobs: 1, normalize: False1.19303364-3.89578088592

30、.62104122多元線性回歸-實戰(zhàn) 數據介紹利用sklearn機器學習庫根據面積和房間數預測房價100平米、兩個房間的房價估價是多少?數據挖掘經典算法邏輯回歸1PCA降維2 K-近鄰算法3樸素貝葉斯分類4K均值聚類56決策樹7EM算法8支持向量機K-均值聚類-簡介 從無標簽數據中組織數據的結構,從而對樣本進行分組,是無監(jiān)督學習的一種常用聚類方法。聚類示例將無標簽的數據集分成兩組輸入數據不含任何標簽將相似的樣本劃分為一個組K-均值聚類-簡介原始數據集劃分為2個簇劃分為4個簇K-均值聚類-原理 K-means聚類算法流程可以分為四個步驟,需要注意幾點:距離度量:歐氏距離、余弦相似度等質心計算:樣

31、本均值第1步. 從數據中隨機選擇K個對象作為初始聚類中心;第2步.計算每個聚類對象到聚類中心的距離來劃分K個簇;第3步.計算每個簇的質心作為新的聚類中心;第4步.重復步驟2、3,直到達到最大迭代次數,最后所有樣本被分為K個簇。K-均值聚類-原理 K如何選擇?K的選擇一般是按照實際需求進行決定,或在實現算法時直接給定K值 。 距離度量給定樣本 與,常用的距離度量有以下三種:閔可夫斯基距離(Minkowski distance):歐氏距離(Euclidean distance):曼哈頓距離(Manhattan distance):即當 p=2 時的閔可夫斯基距離即當 p=1 時的閔可夫斯基距離 更

32、新“簇中心”對于劃分好的各個簇,計算各個簇中的樣本點均值,將其均值作為新的簇中心。K-均值聚類-原理K-均值聚類-原理 K-均值算法缺點 K-均值算法由于初始“簇中心”點是隨機選取的,因此最終求得的簇的劃分與隨機選取的“簇中心”有關,也就是說,可能會造成多種 k 個簇的劃分情況。這是因為K-均值算法收斂到了局部最小值,而非全局最小值。K-均值聚類-實戰(zhàn) 數據介紹按照每一個實例的相似度聚類成多個簇K-均值聚類-實戰(zhàn) 代碼結構def loadDataSet(filename): 讀取數據集 Args: filename: 文件名 Returns: dataMat: 數據樣本矩陣 dataMat =

33、 with open(filename, rb) as f: for line in f: # 讀取的字節(jié)流需要先解碼成utf-8再處理 eles = list(map(float, line.decode(utf-8).strip().split(t) dataMat.append(eles) return dataMatK-均值聚類-實戰(zhàn) 代碼結構def distEclud(vecA, vecB): 計算兩向量的歐氏距離 Args: vecA: 向量A vecB: 向量B Returns: 歐式距離 return np.sqrt(np.sum(np.power(vecA-vecB,2)K-

34、均值聚類-實戰(zhàn) 代碼結構def randCent(dataSet, k): 隨機生成k個聚類中心 Args: dataSet: 數據集 k: 簇數目 Returns: centroids: 聚類中心矩陣 m, _ = dataSet.shape # 隨機從數據集中選幾個作為初始聚類中心 centroids = dataSet.take(np.random.choice(80,k), axis=0) return centroidsK-均值聚類-實戰(zhàn) 代碼結構def kMeans(dataSet, k, maxIter=20): K-Means Args: dataSet: 數據集 k: 聚類數

35、 Returns: centroids: 聚類中心 clusterAssment: 點分配結果 # 隨機初始化聚類中心 centroids = randCent(dataSet, k) init_centroids = centroids.copy() m, n = dataSet.shape # 點分配結果:第一列指明樣本所在的簇,第二列指明 該樣本到聚類中心的距離 clusterAssment = np.mat(np.zeros(m, 2) # 標識聚類中心是否仍在變化 clusterChanged = True # 直至聚類中心不再變化 iterCount = 0 while clust

36、erChanged and iterCount maxIter: iterCount += 1 clusterChanged = False # 分配樣本到簇 for i in range(m): # 計算第i個樣本到各個聚類中心的距離 minIndex = 0 minDist = np.inf for j in range(k): dist = distEclud(dataSeti, :, centroidsj, :) if dist array ptsInCluster = dataSetnp.nonzero(clusterAssment:, 0.A = cent)0 if ptsInCl

37、uster.shape0 0: # 計算均值并移動 centroidscent, : = np.mean(ptsInCluster, axis=0) return centroids, clusterAssment, init_centroidsK-均值聚類-實戰(zhàn) 代碼結構dataMat = np.mat(loadDataSet(data/testSet.txt)m, n = np.shape(dataMat)set_k = 4centroids, clusterAssment, init_centroids = kMeans(dataMat, set_k)clusterCount = np.

38、shape(centroids)0# 我們這里只設定了最多四個簇的樣式,所以前面如果set_k設置超過了4,后面就會出現index errorpatterns = o, D, , scolors = b, g, y, blackfig = plt.figure()title = kmeans with k=.format(set_k)ax = fig.add_subplot(111, title=title)for k in range(clusterCount): # 繪制聚類中心 ax.scatter(centroidsk,0, centroidsk,1, color=r, marker=

39、+, linewidth=20) # 繪制初始聚類中心 ax.scatter(init_centroidsk,0, init_centroidsk,1, color=purple, marker=*, linewidth=10 ) for i in range(m): # 繪制屬于該聚類中心的樣本 ptsInCluster = dataMatnp.nonzero(clusterAssment:,0.A=k)0 ax.scatter(ptsInCluster:,0.flatten().A0, ptsInCluster:,1.flatten().A0, color=colorsk, marker=

40、patternsk)plt.show()K-均值聚類-實戰(zhàn) 代碼結構利用sklearn機器學習庫classsklearn.cluster.KMeans(n_clusters=8,init=k-means+,n_init=10,max_iter=300,tol=0.0001,precompute_distances=auto,verbose=0,random_state=None,copy_x=True,n_jobs=None,algorithm=auto) KMeans類的主要參數有: 1) n_clusters: 即我們的k值,一般需要多試一些值以獲得較好的聚類效果。 2)max_iter:

41、 最大的迭代次數。 3)n_init:用不同的初始化質心運行算法的次數。由于K-Means是結果受初始值影響的 局部最優(yōu)的迭代算法,因此需要多跑幾次以選擇一個較好的聚類效果,默認是10,一般不需要改。如果你的k值較大,則可以適當增大這個值。 4)init: 即初始值選擇的方式,可以為完全隨機選擇random,優(yōu)化過的k-means+或者自己指定初始化的k個質心。一般建議使用默認的k-means+。 5)algorithm:有“auto”, “full” or “elkan”三種選擇。“full”就是我們傳統(tǒng)的K-Means算法, “elkan”是elkan K-Means算法。默認的auto則

42、會根據數據值是否是稀疏的,來決定如何選擇full和“elkan”。一般數據是稠密的,那么就是 “elkan”,否則就是full”。一般來說建議直接用默認的autoK-均值聚類-實戰(zhàn) 代碼結構利用sklearn機器學習庫fit(self, X)fit_predict(self, X) KMeans類的主要方法:對數據X聚類對數據X聚類且計算每一個樣本點對應的類別索引predict(self, X)預測新輸入的樣本對應的最近的聚類中心X:ndarray數據類型K-均值聚類-實戰(zhàn) 代碼結構利用sklearn機器學習庫import numpy as npimport matplotlib.pyplot

43、 as pltfrom sklearn.cluster import KMeansfrom sklearn.datasets import make_blobsplt.figure(figsize=(12, 12)n_samples = 1500random_state = 200X, y = make_blobs(n_samples=n_samples, random_state=random_state)# Incorrect number of clustersy_pred = KMeans(n_clusters=3, random_state=random_state).fit_pre

44、dict(X)plt.plot()plt.scatter(X:, 0, X:, 1, c=y_pred)plt.title(kmeans)plt.show()K-均值聚類-實戰(zhàn) 代碼結構利用sklearn機器學習庫K-Means+ 由于 K-means 算法的分類結果會受到初始點的選取而有所區(qū)別,因此有提出這種算法的改進: K-means+ ,其實這個算法也只是對初始點的選擇有改進而已,其他步驟都一樣。初始質心選取的基本思路就是,初始的聚類中心之間的相互距離要盡可能的遠。K-Means+ 數據集中共有8個樣本,分布以及對應序號如右圖所示: 聚類中心選取示例 假設經過步驟一后6號點被選擇為第一個

45、初始聚類中心,那在進行步驟二時每個樣本的D(x)和被選擇為第二個聚類中心的概率如下表所示:K-Means+ 聚類中心選取示例 其中的P(x)就是每個樣本被選為下一個聚類中心的概率。最后一行的Sum是概率P(x)的累加和,用于輪盤法選擇出第二個聚類中心。方法是隨機產生出一個01之間的隨機數,判斷它屬于哪個區(qū)間,那么該區(qū)間對應的序號就是被選擇出來的第二個聚類中心了。 例如1號點的區(qū)間為0,0.2),2號點的區(qū)間為0.2, 0.525)。 從上表可以直觀的看到第二個初始聚類中心是1號,2號,3號,4號中的一個的概率為0.9。而這4個點正好是離第一個初始聚類中心6號點較遠的四個點。 這也驗證了K-me

46、ans的改進思想:即離當前已有聚類中心較遠的點有更大的概率被選為下一個聚類中心。數據挖掘經典算法邏輯回歸1PCA降維2 K-近鄰算法3樸素貝葉斯分類4K均值聚類56決策樹7EM算法8支持向量機PCA-簡介 數據降維 在實際生產生活中,我們所獲得的數據集在特征上往往具有很高的維度,對高維度的數據進行處理時消耗的時間很大,并且過多的特征變量也會妨礙查找規(guī)律的建立。如何在最大程度上保留數據集的信息量的前提下進行數據維度的降低,是我們需要解決的問題。 對數據進行降維有以下優(yōu)點:(1)使得數據集更易使用 (2)降低很多算法的計算開銷 (3)去除噪聲 (4)使得結果易懂PCA-簡介 數據降維如何降維可以保

47、留盡可能多的信息?PCA-簡介數據降維 數據降維的優(yōu)化目標就是:(1)對于 2 維降到 1 維:找到一個投影方向,使得投影誤差和最小。(2)對于 n 維降到 k 維:找到 k 個向量定義的 k 維投影平面,使得投影 誤差和最小。 那么投影誤差又是什么呢? 投影誤差即為,每一個樣本點到投影向量或者投影平面的距離。 投影誤差和即為所有樣本點到投影向量或投影平面的距離的和。PCA-簡介數據降維為什么將“投影誤差和最小”作為優(yōu)化目標?投影誤差和 假設對于原樣本中,位于第一象限的三個樣本點屬于類別“A”,位于第三象限的兩個樣本點屬于類別“B”。經過投影后,僅左邊可保留類別信息。PCA-簡介 數據降維如何

48、尋找投影誤差最小的方向? 尋找到方差最大的方向即可。方差最大與投影誤差最小這兩個優(yōu)化目標其實本質上是一樣的。希望投影后的投影值盡可能分散PCA-簡介主成分分析(Principal Component Analysis, PCA)是最流行的降維算法,通過把數據從高維映射到低維來降低特征維度,同時保留盡可能多的信息。廣泛應用于降維、有損數據壓縮、特征提取、數據可視化等領域。是一種無監(jiān)督的學習方式。 數據降維PCA-簡介進行主成分分析有兩個目的: 1. 在保留盡可能多的信息的前提下,降低維度。 2. 各樣本在新的維度上,沒有相關關系(線性)。 也就是不能根據一個維度的值就能大概推測(線性)另一個維度

49、的值。主成分分析第一條原則是新的變量要盡量分散,因為這樣代表差異性大,蘊含了更多的信息。第二條原則是新的變量之間線性無關,這樣就盡量消除了冗余信息。PCA-簡介 PCA算法思路 PCA的算法思路主要是:數據從原來的坐標系轉換到新的坐標系,由數據本身決定。轉換坐標系時,以方差最大的方向作為坐標軸方向,因為數據的最大方差給出了數據的最重要的信息。第一個新坐標軸選擇的是原始數據中方差最大的方向,第二個新坐標軸選擇的是與第一個新坐標軸正交且方差次大的方向。重復該過程,重復次數為原始數據的特征維數。PCA-深入分析 數學基礎PCA-簡介 PCA算法思路 有了前述兩條原則以后,那應該具體怎樣一步步實現?對

50、于分散程度的度量,我們知道,通常用方差表示。而對于相關性的度量,協(xié)方差是一個常見的度量方式。 所以,上述目標轉換為: 每個新變量的方差盡量大,新變量之間的協(xié)方差為0。PCA-簡介 PCA算法思路舉個例子,有兩個變量的矩陣A為:目標轉換為: 協(xié)方差矩陣的對角線上元素盡量大,其它元素為0,也就是需要進行對角化。PCA-簡介 PCA算法思路協(xié)方差矩陣是實對稱矩陣,這里需要利用實對稱矩陣的一個性質:nxn的實對稱矩陣一定可以找到n個單位正交的特征向量,一定可以對角化,特征向量是進行對角化的轉移矩陣,特征值組成對角矩陣。因此,問題轉化為特征值分解,然后取較大的特征值。 對協(xié)方差矩陣進行特征值分解,特征值

51、從大到小排序組成新的協(xié)方差矩陣,對應的特征向量(單位正交基)就組成了轉移矩陣Q。所以,轉換后新的變量C=QA。PCA-簡介 PCA算法思路完成變換以后,降維就很容易。新協(xié)方差矩陣對角線元素是方差,是包含信息量的度量,而對角線元素從大到小排列,所以只需取前k個變量(列)即可。k具體是多少,可以指定,也可以先計算所有方差的和S,如果前n個方差的和大于了95%*S,那么k就取n。PCA-深入分析 算法過程 缺點分析數據維度降低并不代表特征的減少,因為降維仍舊保留了較大的信息量,對結果過擬合問題并沒有幫助。不能將降維算法當做解決過擬合問題方法。如果原始數據特征維度并不是很大,也并不需要進行降維。PCA

52、-實例 要求將二維數據降為1維 解決步驟因為這個矩陣的每行已經是零均值,這里我們直接求協(xié)方差矩陣:求解后特征值和特征向量為:PCA-實例 最后我們用P的第一行乘以數據矩陣,就得到了降維后的表示:降維投影結果如右圖:標準化后的特征向量為:因此我們的矩陣P是:PCA-實戰(zhàn)sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)n_components: int, float, None 或 string,PCA算法中所要保留的主成分個數,也即保留下來的特征個數,如果 n_components = 1,將把原始數據降到

53、一維;如果賦值為string,如n_components=mle,將自動選取特征個數,使得滿足所要求的方差百分比;如果沒有賦值,默認為None,特征個數不會改變(特征數據本身會改變)。copy:True 或False,默認為True,即是否需要將原始訓練數據復制。whiten:True 或False,默認為False,即是否白化,使得每個特征具有相同的方差。PCA-實戰(zhàn) PCA對象的屬性explained_variance_ratio_:返回所保留各個特征的方差百分比,如果n_components沒有賦值,則所有特征都會返回一個數值且解釋方差之和等于1。n_components_:返回所保留的

54、特征個數。PCA-實戰(zhàn) PCA常用方法fit(X): 用數據X來訓練PCA模型。fit_transform(X):用X來訓練PCA模型,同時返回降維后的數據。transform(X):將數據X轉換成降維后的數據,當模型訓練好后,對于新輸入的數據,也可以用transform方法來降維。PCA-實戰(zhàn)import numpy as npimport matplotlib.pyplot as pltfrom sklearn.decomposition import PCAX = np.array(-1, -1, -2, -1, -3, -2, 1, 1, 2, 1, 3, 2)#pca = PCA(n

55、_components=2)#newX = pca.fit_transform(X)print(X)#print(newX)#print(pca.explained_variance_ratio_)pca = PCA(n_components=1)newX = pca.fit_transform(X)print(newX)#print(pca.explained_variance_ratio_)plt.scatter(X:, 0, X:, 1,marker=o)plt.scatter(newX:, 0, newX:, 0*0,color=r)plt.show()數據挖掘經典算法邏輯回歸1PCA

56、降維2 K-近鄰算法3樸素貝葉斯分類4K均值聚類56決策樹7EM算法8支持向量機K-近鄰算法-簡介 給定一個訓練數據集,對新的輸入實例,在訓練數據集中找到與該實例最鄰近的 k 個實例,這 k 個實例的多數屬于某個類,就把該輸入實例分為這個類。 定義綠色點屬于什么類別?當 k=3 時,結果見第一個圓環(huán)內,此時紅色實例點為2個,藍色實例點為1個,因此將未知點判定為紅色類別。當 k=5 時,結果見第二個圓環(huán)內,此時紅色實例點為2個,藍色實例點為3個,因此將未知點判定為藍色類別。K-近鄰算法-分析 給定一個訓練數據集,對新的輸入實例,在訓練數據集中找到與該實例最鄰近的 k 個實例,這 k 個實例的多數

57、屬于某個類,就把該輸入實例分為這個類。 定義回顧K-近鄰算法的三大要素距離的度量:一般使用歐氏距離K值的選擇:結果對k值敏感,一般通過交叉驗證選擇分類決策規(guī)則:投票法K-近鄰算法-步驟輸入:輸出:輸入訓練數據K-近鄰算法-優(yōu)缺點分析 訓練樣本是否要一視同仁?在訓練集中,有些樣本可能是更值得依賴的??梢越o不同的樣本施加不同的權重,加強依賴樣本的權重,降低不可信賴樣本的影響。weight = 1 / (distance + const) 性能問題?KD樹Ball樹暴力匹配K-近鄰算法-優(yōu)缺點分析 優(yōu)點 缺點精度高對異常值不敏感無數據輸入假定計算復雜度高空間復雜度高樣本不平衡時分類錯誤幾率較高K-近

58、鄰算法-實戰(zhàn)class sklearn.neighbors.NearestNeighbors(n_neighbors=5, algorithm=auto, leaf_size=30, metric=minkowski, p=2, metric_params=None, n_jobs=None, *kwargs) K近鄰算法n_neighbors : int, optional (default = 5) 鄰居的個數algorithm : auto, ball_tree, kd_tree, brute, optional ball_tree BallTree kd_tree KDTree bru

59、te 暴力搜索. auto 根據數據自動選擇leaf_size:使用BallTree 或 KDTree時需指定,影響計算速度,具體問題具體對待metric: 距離度量類型,cityblock, cosine, euclidean, l1, l2, manhattanP:閔式距離時的范數metric_params:自定義距離度量函數K-近鄰算法-實戰(zhàn) K近鄰算法fit(X) 學習KNN模型kneighbors(X) 尋找最近的K個點常用成員方法K-近鄰算法-實戰(zhàn) K近鄰算法from sklearn.neighbors import NearestNeighborsimport numpy as

60、np # 快速操作結構數組的工具X = np.array(-1, -1, -2, -1, -3, -2, 1, 1, 2, 1, 3, 2) # 樣本數據test_x = np.array(-3.2, -2.1, -2.6, -1.3, 1.4, 1.0, 3.1, 2.6, 2.5, 1.0, -1.2, -1.3) # 設置測試數據# test_x=X # 測試數據等于樣本數據。這樣就相當于在樣本數據內部查找每個樣本的鄰節(jié)點了。nbrs = NearestNeighbors(n_neighbors=2, algorithm=ball_tree).fit(X) # 為X生成knn模型dist

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論