[機器學習]-[數據預處理]-中心化 縮放 KNN(一)


據預處理是總稱,涵蓋了數據分析師使用它將數據轉處理成想要的數據的一系列操作。例如,對某個網站進行分析的時候,可能會去掉 html 標簽,空格,縮進以及提取相關關鍵字。分析空間數據的時候,一般會把帶單位(米、千米)的數據轉換為“單元性數據”,這樣,在算法的時候,就不需要考慮具體的單位。數據預處理不是憑空想象出來的。換句話說,預處理是達到某種目的的手段,並且沒有硬性規則,一般會跟根據個人經驗會形成一套預處理的模型,預處理一般是整個結果流程中的一個環節,並且預處理的結果好壞需要放到到整個流程中再進行評估。

本次,只使用縮放數值數據來說明預處理的重要性,數值數據:值包含數字,縮放:使用基本的運算來改變數據的范圍。最后,將會使用真實的數據來演示縮放預處理提升了結果。
首先,簡單說一下機器學習和 KNN(k-Nearest Neighblors)的分類問題,分類問題是他們里面最簡單的算法。為了體現縮放數據的重要性,還會介紹模型評估方式和訓練集、測試集的概念。這些概念和操作都會在分類紅酒質量的時演示。演示的時候會看到預處理前后對結果的影響。

機器學習分類問題簡介

分類和標記問題是一個們古老的藝術。比如,亞里士多德構建的生物分類系統。現在,分類一般都是作為機器任務任務的一個通用框架,特別是監督學習。監督學習的基本概念也不復雜,這樣的數據中包含預測參數和預測目標結果,監督學習的目標是構建善於通過給出的預測參參數預測目標結果的模型。如果目標結果包含分類信息(如,‘good’,'bad'),這就是所說分類學習任務。如果目標結果是不斷變化的,這就是一個回歸任務。
介紹一個有用的數據集:心臟病數據集,其中有 75 個預測參數,如,‘age’,‘sex’以及目標結果,心臟病患病概率范圍是0(無病)-4。對這個數據集的大部分分析集中在預測是否出現心臟病。這就是一個分類任務。如果是預測0-4的實際值,那么,就是回歸問題。以后再討論回歸問題。這次主要討論分類任務重最簡單的算法,KNN。

機器學習的 KNN 分類

假設已經有一些標記好的數據,例如,包含紅酒特征的數據,預測參數:alcohol content, density, amount of citric acid, pH,目標結果:Quality(good,bad)。然后,使用特征的新數據,沒有標記結果,分類任務就是去預測結果 Quality。如果所有的預測參數都是數值,我們就可以想象一個 n 為空間,每行/紅酒作為空間中的一個點。KNN 是概念和計算都很簡單的分類方法,我們計算這些沒有標記的數據行,在 n 維空間中,最近的 K 個已經標記過的鄰居。然后,根據這 K 個鄰居的標簽,good 或 bad,再將命中率最高(占比最高)的標簽值給新的預測數據(例如,如果 K=10,其中 7 個 good,3 個 bad,結果就是 good)。注意,這里沒有 fit 參數。
   

圖說 K 鄰近

下面是 KNN 的一個 2D 圖。思考一下,中間綠色問好的點應該如何分類。如果 K = 5,分類就是藍色,,如果 k = 10 ,結果又如何呢?
 
 
Scikit Learn KNN
我們接下來看一下 KNN 的例子。我們將紅酒質量數據集加載到 pandas 的 DataFrame 中,然后通過直方圖看下數據基本信息
我們看下這兩個預測變量,free sulfur dioxide 的范圍 1-72,volatile acidity 的范圍是 0.12-1.58。簡單的說就是,前一個的的范圍和數量級都比后一個大很多。像 KNN 這樣的算法,關心的是兩個數據點之間的距離,因此,算法可能會將關注點直接放在范圍更范圍的變量上,這樣就會對范圍小的變量不公平,像 free sulfur dioxide 可能還會有噪點,這樣的數據必然會導致結果准確度有所降低。這就是為什么要縮放我們即將使用的數據。
現在目標結果就是紅酒的‘Quality’率,它的范圍是 3 到 8。簡單起見,將這個范圍轉換為二分類,大於 5 -> good,小於等於 5 -> bad。下面用直方圖說明一下二分類前后目標結果的變化:
 
接下來我們就准備執行 KNN。我們本次的目的是比較我們的模型在有無縮放處理的情況下的結果優劣,既然要區分結果的優劣我們就需要一個評價標准。
 

如何評價 KNN 結果

有很多對分類的評價方式/指標,最終重要的是,要認識到方式/指標的選擇是一個很有深度的領域,並且需要具體問題具體分析。對於平衡類(目標結果,要么是是,要么是否)數據集,通常將准確性作為評價標准。事實上,在 scikit learn 中 KNN 和邏輯回歸默認評分方法就是精度。那么,什么是精度呢?它就是正確預測的數量除以預測的總數:
Accuracy = 正確預測數量/預測總數
 

KNN 的使用和訓練測試的分割

我們就使用上面介紹的江都作為衡量的標准,如果我們把先有的數據都作為訓練模型用,我們應該用什么數據集來作為計算精度的數據呢?我們需要一個能很好推廣到新數據的模型。也就是說,如果我們在數據集 A 上訓練模型,也使用數據集 A 計算精度,那么得出的結果遠遠好於實際結果。這就是我們常說的過擬合。為了解決這個問題,通常會選取數據集中的一部分作為訓練集,然后,在訓練集上訓練模型,再使用剩下的數據集進行評估。我們也是要這么做的。一般的經驗規則是使用大約 80% 的數據用於訓練,剩下 20% 的數據用於測試。現在我們就可以分析紅酒質量數據了:
 
現在我構建 KNN 模型,對測試集進行預測,為了評估模型,我們需要對比預測值和真實值:
在 scikit learn 中精度是 KNN 的默認評分方法,精度的結果是 61%,這個結果並不好,但對於沒有任何預處理的結果來說,也並不是太壞。
 
預告 [數據預處理]-中心化 縮放 KNN(二)
使用其他的評估方法(reacll,f1)重新評估結果
使用預處理將精度結果再提高 10% 左右
完整的代碼
 
 
最后謝謝  @K戰神 反饋關於圖裂的問題,現已經編輯好


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM