❶ python 離散型數據怎麼量化
python 離散型數據量化的方法可以採用變數轉換方法來解決,分類數據和連續數據需要參與模型計算,並且通常會轉換為數值數據。
當然,某些演算法允許這些數據直接參與計算,例如分類演算法中的決策樹和關聯規則。將非數字數據轉換為數字數據的最佳方法是將所有類別或有序變數的范圍從一列多值形式轉換為僅包含真值的多列。可以將True值傳遞給True,False或0、1。這種符號轉換方法有時稱為真值轉換。
具體代碼是:
import pandas as pddata = [.
['yellow', 'S', 10.1, 'class1'].
['red', 'M', 13.5, 'class1'].
['red', 'M', 15.1, 'class2'].
['blue', 'XL', 15.3, 'class2'.
df = pd.DataFrame(.
data,columns=['color', 'size', 'prize', 'class'].
python 離散型數據用連續數據處理的方法是:
1、等寬法:若數據區間為0~20,設置箱子個數為4個,則等寬法會將數據裝入4個箱子:[0,5],(5,10],(10,15],(15,20],並且可以設置每個箱子的名字,如1、2、3、4。
等寬法缺點是分箱結果會受到最值影響。並且需要人為指定箱子個數,比較依賴於經驗。分箱結果會直接影響後續分類、聚類的結果。
2、等頻法:等頻法是指將一組數據分解成n個部分後,每個部分的記錄數量是一樣多的。等頻法常用pandas庫中的qcut()函數進行處理。
❷ 怎麼處理缺失值/異常值
https://www.hu.com/question/58230411?sort=created
https://blog.csdn.net/Forlogen/article/details/89534235
(1)隨機丟失(MAR,Missing at Random)(數據丟失的概率與丟失的數據本身無關,而依賴於其他完全變數(無缺失變數))
隨機丟失意味著數據丟失的概率與丟失的數據本身無關,而僅與部分已觀測到的數據有關。也就是說,數據的缺失不是完全隨機的,該類數據的缺失依賴於其他完全變數。
(2)完全隨機丟失(MCAR,Missing Completely at Random)(數據缺失完全隨機事件,無依賴關系)
數據的缺失是完全隨機的,不依賴於任何不完全變數或完全變數,不影響樣本的無偏性。簡單來說,就是數據丟失的概率與其假設值以及其他變數值都完全無關。
(3)非隨機丟失(MNAR,Missing not at Random)
數據的缺失與不完全變數自身的取值有關。分為兩種情況:缺失值取決於其假設值(例如,高收入人群通常不希望在調查中透露他們的收入);或者,缺失值取決於其他變數值(假設基礎數據很正常,也無臨床症狀,醫生可能就覺得無需進一步檢查,所以會有數據缺失)。
在前兩種情況下可以根據其出現情況刪除缺失值的數據,同時,隨機缺失可以通過已知變數對缺失值進行估計。
在第三種情況下,刪除包含缺失值的數據可能會導致模型出現偏差,同時,對數據進行填充也需要格外謹慎。
如果一個病人的體溫測量值是有時缺失的,其原因是醫生覺得病得太重的病人不需要量體溫,那這個缺失顯然不是MAR或者MCAR的。對於離散型特徵,如果將特徵中的缺失值單獨編碼成一個獨立的類別(比如missing),而這個missing類別訓練出來後對response有預測作用,那麼這個特徵中的缺失行為基本不是MAR或者MCAR的。
(1)generative methods:這些方法主要依賴於EM演算法和深度學習,如DAE、GAN等
(2)discriminative methods:如MICE、MissForest、matrix completion等
目前的生成式填補演算法存在著一些缺點,它們是以一種基於對數據分布的先驗假設的方法,當數據中含有混合類別和連續變數時,它的泛化能力就會很差。DAE在一定程度上解決了這個問題,但是它在訓練的過程中需要完整的數據集,在很多情況下,缺失的數據部分在一定程度上反映了完整數據集的內在結構信息,所以獲取到完整的數據集是不太可能的。DAE的另一種方法允許使用不完整的數據集進行訓練,但是它只能根據觀察到的部分來表示數據。而使用DCGANs來完成圖像填補的演算法,同樣需要完整的數據集來訓練判別器。
難點:如果其他變數和缺失變數無關,則預測的結果無意義。如果預測結果相當准確,則又說明這個變數是沒必要加入建模的。一般情況下,介於兩者之間。
方法 0(最簡單粗暴):在構建模型時忽略異常值。 如果缺失數據量少的話
方法1(快速簡單但效果差):把數值型(連續型)變數中的缺失值用其所對應的類別中的中位數替換。把描述型(離散型)變數缺失的部分用所對應類別中出現最多的數值替代。
方法2(耗時費力但效果好):雖然依然是使用中位數和出現次數最多的數來進行替換,方法2引入了權重。即對需要替換的數據先和其他數據做相似度測量也就是下面公式中的Weight,在補全缺失點是相似的點的數據會有更高的權重W。
方法3 (類xgboost):把缺失值當做稀疏矩陣來對待,本身的在節點分裂時不考慮的缺失值的數值。缺失值數據會被分到左子樹和右子樹分別計算損失,選擇較優的那一個。如果訓練中沒有數據缺失,預測時出現了數據缺失,那麼默認被分類到右子樹。這樣的處理方法固然巧妙,但也有風險:即我們假設了訓練數據和預測數據的分布相同,比如缺失值的分布也相同,不過直覺上應該影響不是很大:)
方法4 (回歸):基於完整的數據集,建立回歸方程。對於包含空值的對象,將已知屬性值代入方程來估計未知屬性值,以此估計值來進行填充。當變數不是線性相關時會導致有偏差的估計。
方法5 (Kmeans)先根據歐式距離或相關分析來確定距離具有缺失數據樣本最近的K個樣本,將這K個值加權平均來估計該樣本的缺失數據。
方法6 (離散化)為缺失值定製一個特徵值比如,男/女/缺失 分別對應[0/1,0/1,0/1]=>[0,0,1] 這種onehot編碼,特徵離散化後加入計算。
方法1(AutoEncoder系列):在訓練的時候使用0作為缺失值,相當於不激活邊,在輸出的時候不論輸出了什麼都強行置為0,防止反向傳播的時候影響到邊的權重。
方法2 GAN(GAIN),目前的SOTA
方法1(MissForest):對於一個有n個特徵的數據來說,其中特徵T有缺失值,我們就把特徵T當作標簽,其他的n-1個特徵和原本的標簽組成新的特徵矩陣。那對於T來說,它沒有缺失的部分,就是我們的Y_test,這部分數據既有標簽也有特徵,而它缺失的部分,只有特徵沒有標簽,就是我們需要預測的部分。
那如果數據中除了特徵T之外,其他特徵也有缺失值怎麼辦?答案是遍歷所有的特徵,從缺失最少的開始進行填補(因為填補缺失最少的特徵所需要的准確信息最少)。
填補一個特徵時,先將其他特徵的缺失值若為連續型值可用中位數、平均數代替,離散可用眾數代替,每完成一次回歸預測,就將預測值放到原本的特徵矩陣中,再繼續填補下一個特徵。每一次填補完畢,有缺失值的特徵會減少一個,所以每次循環後,需要用0來填補的特徵就越來越少。當進行到最後一個特徵時(這個特徵應該是所有特徵中缺失值最多的),已經沒有任何的其他特徵需要用0來進行填補了,而我們已經使用回歸為其他特徵填補了大量有效信息,可以用來填補缺失最多的特徵。
方法2(matrix factorization):矩陣分解
然後梯度下降一把梭
「年收入」:商品推薦場景下填充平均值,借貸額度場景下填充最小值;
「行為時間點」:填充眾數;
「價格」:商品推薦場景下填充最小值,商品匹配場景下填充平均值;
「人體壽命」:保險費用估計場景下填充最大值,人口估計場景下填充平均值;
「駕齡」:沒有填寫這一項的用戶可能是沒有車,為它填充為0較為合理;
」本科畢業時間」:沒有填寫這一項的用戶可能是沒有上大學,為它填充正無窮比較合理;
「婚姻狀態」:沒有填寫這一項的用戶可能對自己的隱私比較敏感,應單獨設為一個分類,如已婚1、未婚0、未填-1。
主流的機器學習模型千千萬,很難一概而論。但有一些經驗法則(rule of thumb)供參考:
1)樹模型對於缺失值的敏感度較低,大部分時候可以在數據有缺失時使用。
2)涉及到距離度量(distance measurement)時,如計算兩個點之間的距離,缺失數據就變得比較重要。因為涉及到「距離」這個概念,那麼缺失值處理不當就會導致效果很差,如K近鄰演算法(KNN)和支持向量機(SVM)。
3)線性模型的代價函數(loss function)往往涉及到距離(distance)的計算,計算預測值和真實值之間的差別,這容易導致對缺失值敏感。
4)神經網路的魯棒性強,對於缺失數據不是非常敏感,但一般沒有那麼多數據可供使用。
5)貝葉斯模型對於缺失數據也比較穩定,數據量很小的時候首推貝葉斯模型。
總結來看,對於有缺失值的數據在經過缺失值處理後: