獨家 | 在機器學習中利用統計插補來處理缺失值(附代碼)

2021-02-20 數據派THU

本文以病馬數據集為例,幫助你了解在機器學習領域如何利用統計策略來處理缺失值,對代碼進行了較為詳細的講解。數據有可能會含有缺失值,而這可能會導致多種機器學習算法出現問題。同樣地,在你對自己的預測任務進行建模之前,對數據每一列進行缺失值識別和替換是非常恰當的做法。這一步驟被稱為數據缺失值插補處理,或者簡稱插補。一種常見的數據缺失值插補方式是計算每一列的統計值(例如均值),並用這個值來替換該列所有的缺失值。這是一個非常受歡迎的方法,因為對於訓練集很容易計算出一列的統計值,另外這種方法所獲得的效果也比較理想。在這篇教程中,你會了解到在機器學習領域如何利用統計插補來處理缺失值。

缺失值必須被標記為NaN,且可以被用統計方法計算出的列的值來替代。

如何載入一份帶有缺失值的CSV文件,用NaN來標識缺失值,展現出每一列的缺失值數量和百分比。

如何用統計量來填充缺失值,作為數據準備方法中的一個步驟,用於評估模型和用最終模型和新數據來擬合預測結果。

教程綜述


3. 利用SimpleImputer來進行統計插補

1. SimpleImputer 數據轉換

2. SimpleImputer 和模型評估

3. 比較不同的插補統計量

4. 在預測時進行SimpleImputer轉換

統計插補缺失值是指一行數據中某一項或者多項的數據值沒有意義。有可能是值為空,也有可能是用一些特殊的字符或值來表示,例如問號「?」。

 「這些值有可能以多種形式來表示。我見過的形式比如有完全為空,一個空的字符串,「NULL」欄位、「N/A」或「NaN」,再就是數字0等等。不管它們以什麼樣的形式出現在你的數據集裡,你要清楚自己的目的,並且確定這些數據的作用匹配達到你的預期,這樣將會使你在開始使用數據時減少問題的存在。」

——源自2012年出版的《Bad Data Handbook》,第10頁書籍地址:https://amzn.to/3b5yutA
數據有可能因多種原因而造成缺失,這需要根據問題所在的具體領域來確定,比如說包括測量儀器的損壞或者說數據本身就無法獲得。 「數據缺失的出現可能處於多種理由,比如說測量儀器出現故障,在數據收集階段變更了實驗設計,或者從多組近似卻不相同的數據集中所進行採集。」——源自2016年出版的《Data Mining: Practical Machine Learning Tools and Techniques》,第63頁書籍地址:https://amzn.to/3bbfIAP大部分機器學習算法都要求輸入的類型為數值,而且數據集中的每一行每一列都有值的存在。既然如此,缺失值的出現可能會導致機器學習算法產生問題。像這樣,普遍情況是識別出數據集中的缺失值,然後用數值來替代它。這個過程被稱為數據插補或數據缺失值插補。一種簡單且流行的數據插補是使用統計方法,對缺失值所在這一列估算出一個值,然後用這個統計方法計算出的統計量來代替這列中的缺失值。這種方法很簡單,因為可以很快計算出統計量,另外這也是很受歡迎的,因為這種方法被證明是非常有效的。現在我們對這些用來缺失值插補的統計方法已經有所熟悉,接下來一起來看看帶有缺失值的數據。病馬數據集


病馬數據集用來記錄患有腹絞痛的馬匹所出現的醫學特徵,還有馬匹最終是生存下來還是死亡。該數據集共有300條記錄(300行),有26個輸入變量和1個輸出變量。這是一個二分類預測問題,標籤有兩個值,馬匹活著是1,馬匹死亡則是2。一個簡單的模型所能達到的分類準確率約為67%。一個表現極佳的模型,使用3次重複的10折交叉驗證的話,預測結果的準確率能夠達到85.2%。這定義了針對該數據集建模所能表現的預期範圍。這個數據集在多個列上包含大量的缺失值,每一個缺失值都標有問號「?」。
2,1,530101,38.50,66,28,3,3,?,2,5,4,4,?,?,?,3,5,45.00,8.40,?,?,2,2,11300,00000,00000,21,1,534817,39.2,88,20,?,?,4,1,3,4,2,?,?,?,4,2,50,85,2,2,3,2,02208,00000,00000,22,1,530334,38.30,40,24,1,1,3,1,3,3,1,?,?,?,1,1,33.00,6.70,?,?,1,2,00000,00000,00000,11,9,5290409,39.10,164,84,4,1,6,2,2,4,4,1,2,5.00,3,?,48.00,7.20,3,5.30,2,1,02208,00000,00000,1...

https://raw.githubusercontent.com/jbrownlee/Datasets/master/horse-colic.csvhttps://raw.githubusercontent.com/jbrownlee/Datasets/master/horse-colic.names我們不需要下載該數據集,因為在接下來的代碼樣例中會自動下載。在使用Python語言來載入數據集時,將所有的缺失值標記為NaN(而不是使用一個數字),是一種很好的做法。我們可以使用Pandas庫中的read_csv()函數來加載數據集,然後指定「na_values」來載入用「?」符號表示的缺失值。
...# load dataseturl = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/horse-colic.csv'dataframe = read_csv(url, header=None, na_values='?')

在加載之後,我們來檢查一下數據,確定所有的「?」都已被標註為NaN。
我們可以列舉出數據集的每一列,觀察下每一列缺失值的數量。
...# summarize the number of rows with missing values for each columnfor i in range(dataframe.shape[1]):  # count number of rows with missing values  n_miss = dataframe[[i]].isnull().sum()  perc = n_miss / dataframe.shape[0] * 100  print('> %d, Missing: %d (%.1f%%)' % (i, n_miss, perc))

試試下面這一整段的代碼,用來完成數據樣本的載入,並對整個數據集進行概述。
# summarize the horse colic datasetfrom pandas import read_csv# load dataseturl = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/horse-colic.csv'dataframe = read_csv(url, header=None, na_values='?')# summarize the first few rowsprint(dataframe.head())# summarize the number of rows with missing values for each columnfor i in range(dataframe.shape[1]):  # count number of rows with missing values  n_miss = dataframe[[i]].isnull().sum()  perc = n_miss / dataframe.shape[0] * 100  print('> %d, Missing: %d (%.1f%%)' % (i, n_miss, perc))

我們可以看到所有標記為「?」的缺失值已經被NaN所替代。
    0   1        2     3      4     5    6   ...   21   22  23     24  25  26  270  2.0   1   530101  38.5   66.0  28.0  3.0  ...  NaN  2.0   2  11300   0   0   21  1.0   1   534817  39.2   88.0  20.0  NaN  ...  2.0  3.0   2   2208   0   0   22  2.0   1   530334  38.3   40.0  24.0  1.0  ...  NaN  1.0   2      0   0   0   13  1.0   9  5290409  39.1  164.0  84.0  4.0  ...  5.3  2.0   1   2208   0   0   14  2.0   1   530255  37.3  104.0  35.0  NaN  ...  NaN  2.0   2   4300   0   0   2[5 rows x 28 columns]

接下來,我們可以看一下關於數據所有列的清單,以及每一列中缺失值的數量和所佔的百分比。
我們可以看到有些列(比如說第1和第2列)沒有缺失值,而有些列(比如說第15和第21列)有很多缺失值,甚至是缺失值佔了大多數。
> 0, Missing: 1 (0.3%)> 1, Missing: 0 (0.0%)> 2, Missing: 0 (0.0%)> 3, Missing: 60 (20.0%)> 4, Missing: 24 (8.0%)> 5, Missing: 58 (19.3%)> 6, Missing: 56 (18.7%)> 7, Missing: 69 (23.0%)> 8, Missing: 47 (15.7%)> 9, Missing: 32 (10.7%)> 10, Missing: 55 (18.3%)> 11, Missing: 44 (14.7%)> 12, Missing: 56 (18.7%)> 13, Missing: 104 (34.7%)> 14, Missing: 106 (35.3%)> 15, Missing: 247 (82.3%)> 16, Missing: 102 (34.0%)> 17, Missing: 118 (39.3%)> 18, Missing: 29 (9.7%)> 19, Missing: 33 (11.0%)> 20, Missing: 165 (55.0%)> 21, Missing: 198 (66.0%)> 22, Missing: 1 (0.3%)> 23, Missing: 0 (0.0%)> 24, Missing: 0 (0.0%)> 25, Missing: 0 (0.0%)> 26, Missing: 0 (0.0%)> 27, Missing: 0 (0.0%)

現在我們知道了病馬數據集中含有缺失值,接下來看看如何使用統計插補。
用SimpleImputer來進行統計插補scikit-learn機器學習工具庫提供SimpleImputer類來支持數據缺失值插補。在這一章節,我們會探索如何高效地使用SimpleImputer。SimpleImputer數據轉換SimpleImputer 是一個數據轉換工具,基於每一列所計算出的統計量類型進行初始配置,例如平均值。
...# define imputerimputer = SimpleImputer(strategy='mean')

接下來這個插補器會適配數據集,並計算每一列的統計量。
...# fit on the datasetimputer.fit(X)

這個適配的插補器會被應用於數據集上,創建一個數據集複本,複本中每一列的缺失值都已經被統計量值所替換。
...# transform the datasetXtrans = imputer.transform(X)

我們可以將這一工具用在病馬數據集上,先後顯示下轉換前和轉換後的缺失值總數,從而確認這個方法是有效的。
# statistical imputation transform for the horse colic datasetfrom numpy import isnanfrom pandas import read_csvfrom sklearn.impute import SimpleImputer# load dataseturl = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/horse-colic.csv'dataframe = read_csv(url, header=None, na_values='?')# split into input and output elementsdata = dataframe.valuesX, y = data[:, :-1], data[:, -1]# print total missingprint('Missing: %d' % sum(isnan(X).flatten()))# define imputerimputer = SimpleImputer(strategy='mean')# fit on the datasetimputer.fit(X)# transform the datasetXtrans = imputer.transform(X)# print total missingprint('Missing: %d' % sum(isnan(Xtrans).flatten()))

執行示例代碼,首次加載數據集時缺失值的總數為1605。
當轉換工具完成配置、適配和執行三步後,新數據集的結果中已經不再存在缺失值,這說明這個功能達到了我們的預期。
SimpleImputer 和模型評估
在評估機器學習模型方面,使用K折交叉驗證是一種不錯的方法。為了正確地使用缺失值插補方法,避免出現數據洩露的情況,這要求被計算的統計量範圍僅僅針對訓練集的每一列,然後再應用於每一折的訓練數據和測試數據上。如果我們利用重採樣的方法來調參,或者用於評估模型的性能,缺失值插補需要包含在重採樣過程之內。——源自2013年出版的《Applied Predictive Modeling》,第42頁書籍地址:https://amzn.to/3b2LHTL這可以在創造建模流水線(Pipeline)過程中完成,其中第一步就是缺失值插補,第二步才是模型。這一過程可以利用Pipeline類。比如說,下面的Pipeline 使用了 SimpleImputer 方法,將平均值作為統計策略,隨後利用了隨機森林模型。
...# define modeling pipelinemodel = RandomForestClassifier()imputer = SimpleImputer(strategy='mean')pipeline = Pipeline(steps=[('i', imputer), ('m', model)])

針對病馬數據集,利用平均值進行缺失值插補和隨機森林模型的建模流水線,外加使用10折交叉驗證,我們可以評估下上述內容結合後所呈現的效果。
 # evaluate mean imputation and random forest for the horse colic datasetfrom numpy import meanfrom numpy import stdfrom pandas import read_csvfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.impute import SimpleImputerfrom sklearn.model_selection import cross_val_scorefrom sklearn.model_selection import RepeatedStratifiedKFoldfrom sklearn.pipeline import Pipeline# load dataseturl = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/horse-colic.csv'dataframe = read_csv(url, header=None, na_values='?')# split into input and output elementsdata = dataframe.valuesX, y = data[:, :-1], data[:, -1]# define modeling pipelinemodel = RandomForestClassifier()imputer = SimpleImputer(strategy='mean')pipeline = Pipeline(steps=[('i', imputer), ('m', model)])# define model evaluationcv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)# evaluate modelscores = cross_val_score(pipeline, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')print('Mean Accuracy: %.3f (%.3f)' % (mean(scores), std(scores)))

正確地執行上面的示例,每一折交叉驗證過程中都有使用缺失值插補。
流水線用來評估三次重複10折交叉驗證的效果,得到的結果是三次分類的準確率平均值約為84.2%,成績不錯。
Mean Accuracy: 0.842 (0.049)


比較不同的插補統計量
我們利用「均值」的統計策略來插補缺失值,這個方法對於該數據集來說是好是壞呢?答案是,如果我們是隨意選擇一種方法的話,我們肯定無法來評價它的好壞。我們可以設計一個實驗,檢測每種統計策略,通過比較均值、中位數、眾數(更常用)和常數(0)四種策略,得出哪種策略對這個數據集是最好的策略。每個方法的平均準確率可以用作比較的依據。
# compare statistical imputation strategies for the horse colic datasetfrom numpy import meanfrom numpy import stdfrom pandas import read_csvfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.impute import SimpleImputerfrom sklearn.model_selection import cross_val_scorefrom sklearn.model_selection import RepeatedStratifiedKFoldfrom sklearn.pipeline import Pipelinefrom matplotlib import pyplot# load dataseturl = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/horse-colic.csv'dataframe = read_csv(url, header=None, na_values='?')# split into input and output elementsdata = dataframe.valuesX, y = data[:, :-1], data[:, -1]# evaluate each strategy on the datasetresults = list()strategies = ['mean', 'median', 'most_frequent', 'constant']for s in strategies:  # create the modeling pipeline  pipeline = Pipeline(steps=[('i', SimpleImputer(strategy=s)), ('m', RandomForestClassifier())])  # evaluate the model  cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)  scores = cross_val_score(pipeline, X, y, scoring='accuracy', cv=cv, n_jobs=-1)  # store results  results.append(scores)  print('>%s %.3f (%.3f)' % (s, mean(scores), std(scores)))# plot model performance for comparisonpyplot.boxplot(results, labels=strategies, showmeans=True)pyplot.xticks(rotation=45)pyplot.show()

執行上面的示例代碼,利用重複交叉驗證方法,評估作用在病馬數據集的每種統計插補策略。
你所得到的特定結果可能會非常多樣化,這歸咎於學習算法的隨機性。你可以嘗試去多次執行這段代碼。每一種統計策略所得到的平均準確率結果如下。結果顯示利用常數(例如0)作為填充值的效果最佳,準確率為86.7%,優於其他結果。
>mean 0.851 (0.053)>median 0.844 (0.052)>most_frequent 0.838 (0.056)>constant 0.867 (0.044)

在執行完代碼之後,繪製一個盒須圖來表示所對應的結果集,讓我們來看一下結果的分布,從而用對其進行比較。
我們可以清楚地看到用常數來進行缺失值填充的統計策略,所得到的準確率優於其他策略。

在病馬數據集上利用不同統計策略的缺失值填充後所得模型結果的盒須圖

在進行預測時的SimpleImputer轉換我們可能希望創作一個最終的模型流水線,利用的是常數填充缺失值的方式,使用隨機森林算法,對新數據進行預測。我們可以先定義一個流水線,然後在所有可用數據上進行擬合,最後用predict() 函數進行轉換,把新數據作為一個參數。重要的是,新數據中每一行的缺失值必須用NaN來表示。
...# define new datarow = [2,1,530101,38.50,66,28,3,3,nan,2,5,4,4,nan,nan,nan,3,5,45.00,8.40,nan,nan,2,2,11300,00000,00000]

# constant imputation strategy and prediction for the hose colic datasetfrom numpy import nanfrom pandas import read_csvfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.impute import SimpleImputerfrom sklearn.pipeline import Pipeline# load dataseturl = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/horse-colic.csv'dataframe = read_csv(url, header=None, na_values='?')# split into input and output elementsdata = dataframe.valuesX, y = data[:, :-1], data[:, -1]# create the modeling pipelinepipeline = Pipeline(steps=[('i', SimpleImputer(strategy='constant')), ('m', RandomForestClassifier())])# fit the modelpipeline.fit(X, y)# define new datarow = [2,1,530101,38.50,66,28,3,3,nan,2,5,4,4,nan,nan,nan,3,5,45.00,8.40,nan,nan,2,2,11300,00000,00000]# make a predictionyhat = pipeline.predict([row])# summarize predictionprint('Predicted Class: %d' % yhat[0])

針對一行帶有以NaN來標識缺失值的新數據,分類預測順利完成。
總結在這篇教程中,你找到了如何使用統計策略在機器學習中進行數據缺失值填充。

缺失值必須以NaN來標識,可以計算出一列數據的統計值,然用其來替換缺失值。

如何載入一份帶有缺失值的CSV文件,並用NaN來標識缺失值,展現出每一列的缺失值數量和百分比。

如何用統計策略來填充缺失值,作為數據準備方法中的一個步驟,用於評估模型和用最終模型和新數據來擬合預測結果。

作者簡介Jason Brownlee,機器學習專業博士,通過親自動手寫教程的方式來指導開發人員如何使用現代機器學習方法來取得結果。

原文標題:

Statistical Imputation for Missing Values in Machine Learning

原文連結:

https://machinelearningmastery.com/statistical-imputation-for-missing-values-in-machine-learning/

吳振東,法國洛林大學計算機與決策專業碩士。現從事人工智慧和大數據相關工作,以成為數據科學家為終生奮鬥目標。來自山東濟南,不會開挖掘機,但寫得了Java、Python和PPT。

工作內容:需要一顆細緻的心,將選取好的外文文章翻譯成流暢的中文。如果你是數據科學/統計學/計算機類的留學生,或在海外從事相關工作,或對自己外語水平有信心的朋友歡迎加入翻譯小組。

你能得到:定期的翻譯培訓提高志願者的翻譯水平,提高對於數據科學前沿的認知,海外的朋友可以和國內技術應用發展保持聯繫,THU數據派產學研的背景為志願者帶來好的發展機遇。

其他福利:來自於名企的數據科學工作者,北大清華以及海外等名校學生他們都將成為你在翻譯小組的夥伴。

點擊文末「閱讀原文」加入數據派團隊~

轉載須知

如需轉載,請在開篇顯著位置註明作者和出處(轉自:數據派ID:DatapiTHU),並在文章結尾放置數據派醒目二維碼。有原創標識文章,請發送【文章名稱-待授權公眾號名稱及ID】至聯繫郵箱,申請白名單授權並按要求編輯。

發布後請將連結反饋至聯繫郵箱(見下方)。未經許可的轉載以及改編者,我們將依法追究其法律責任。

點擊「閱讀原文」擁抱組織

相關焦點

  • 機器學習基礎:缺失值的處理技巧(附Python代碼)
    在數據分析和建模中,經常會遇到變量值缺失的情況,這是非常常見的。為了保證數據指標的完整性以及可利用性,通常我們會採取特殊的方式對其進行處理。
  • 「統計實戰」缺失值識別與處理
    關注我的,分析數據不發愁了不信你試試後臺留言,獲取統計軟體在科學研究中,缺失值通常難以避免,但處理起來又比較麻煩,很多人選擇忽略缺失值,但有些時候它們會不知不覺給我們造成麻煩,學幾招缺失值識別和處理的技術還是很有必要的。
  • Python數據清洗(二):缺失值識別與處理
    關於缺失值的判斷可以使用isnull方法。下面使用isnull方法對data3數據(數據可至中---下載)進行判斷,統計輸出的結果如下表所示。如上是關於變量方面的缺失值判斷過程,還可以利用下方的代碼識別數據行的缺失值分布情況:# 判斷數據行中是否存在缺失值如上結果所示,返回True值,說明data3中的數據行存在缺失值。
  • 缺失值插補方法程序和數據release, 總結加註解
    單一插補是指採用一定方式,對每個由於無回答造成的缺失值只構造一個合理的替代值,並將其插補到原缺失數據的位置上,替代後構造出一個完整的數據集。多重插補是一種基於重複模擬的處理缺失值的方法。它從一個包含缺失值的數據集中生成一組完整的數據集。每個數據集中的缺失數據用蒙特卡洛方法來填補。
  • Kaggle知識點:缺失值處理
    寫在前面在進行數據競賽中,數據預處理階段經常需要對數據進行缺失值處理。關於缺失值的處理並沒有想像中的那麼簡單。以下為一些經驗分享,基本涵蓋了大部分處理方式。缺失值處理解決缺失數據問題的方法主要有:成列刪除、成對刪除、虛擬變量調整、插補、多重插補和最大似然等。缺失值統計missing_value_formats = ["n.a.","?"
  • 數據的預處理基礎:如何處理缺失值
    圖片來源: thermofisher數據集缺少值? 讓我們學習如何處理:數據清理/探索性數據分析階段的主要問題之一是處理缺失值。 缺失值表示未在觀察值中作為變量存儲的數據值。 這個問題在幾乎所有研究中都是常見的,並且可能對可從數據得出的結論產生重大影響。
  • 多重插補法處理缺失數據(缺失值)
    圖文撰寫 | tbwhere老師科研論文中,統計分析至關重要,本公眾號的主旨是為大家講解科研過程中的統計分析步驟,以及相關的問題!同時,我們還將以最新發表、或各學科Top期刊文章中的統計方法為例,給大家逐一講解如何做統計(分析數據)!
  • R語言如何檢測和處理數據缺失值?
    這篇文章,總結和分享R語言如何檢測數據中的缺失值,以及針對不同情形下處理缺失值的方法。R語言可以使用is.na()函數來判斷數據集的取值是否為缺失值,並且利用一些匯總函數可以概述數據整體的缺失率、每個樣本的缺失率和每個變量的缺失率。R語言也提供可視化工具來直觀展示變量的缺失分布情況。
  • 統計分析零單系列第五期:缺失值處理(專題)
    基於未知信息的推理插補:研究者可以採用先前研究的數據,或利用priorknowledge來插補缺失值,稱為冷層插補法(colddeck)熱層和冷層的最大區別是:冷層插補是一種外在產生程序,而熱層則是依據研究樣本本身取得缺失值的估計值,即內部產生程序,是更為通用的方法。後面介紹的其他插補法也都是內在產生程序。推理插補法具有十分鮮明的特徵:一是推理插補無須對缺失機制、缺失模式和缺失值的分布做多餘假設。
  • 樣本缺失值處理,你真的操作對了嗎?
    我在數據清理與探索性分析中遇到的最常見問題之一就是處理缺失數據。首先我們需要明白的是,沒有任何方法能夠完美解決這個問題。不同問題有不同的數據插補方法——時間序列分析,機器學習,回歸模型等等,很難提供通用解決方案。在這篇文章中,我將試著總結最常用的方法,並尋找一個結構化的解決方法。在討論數據插補方法之前,我們必須了解數據丟失的原因。
  • 運用R進行缺失值填補
    2.MNAR:非隨機缺失,在這種情況下,你可能需要去檢查數據的收集過程並且試著理解數據為什麼會丟失。例如,大多數人在一項調查中不回答某個問題,可能是因為問題敏感而特意迴避不回答,就屬於非隨機缺失。假設數據缺失的類型是MCAR,過多的數據丟失也是一個問題。通常,一個可靠的最大閾值是數據集總數的5%。如果某些特徵或樣本缺失的數據超過了5%,你可能需要忽略掉這些特徵或樣本。
  • 機器學習基礎:缺失值的處理技巧
    在數據分析和建模中,經常會遇到變量值缺失的情況,這是非常常見的。為了保證數據指標的完整性以及可利用性,通常我們會採取特殊的方式對其進行處理。 這樣的統計計算以及可視化基本已經看出哪些變量缺失,以及缺失比例情況,對數據即有個缺失概況。下面將對缺失變量進行相應處理。
  • 在python中使用KNN算法處理缺失的數據
    處理缺失的數據並不是一件容易的事。 方法的範圍從簡單的均值插補和觀察值的完全刪除到像MICE這樣的更高級的技術。 解決問題的挑戰性是選擇使用哪種方法。 今天,我們將探索一種簡單但高效的填補缺失數據的方法-KNN算法。KNN代表「 K最近鄰居」,這是一種簡單算法,可根據定義的最接近鄰居數進行預測。
  • 數據分析之Pandas缺失數據處理
    基礎概念首先,對缺失值分類和缺失值處理方法進行講解。【注意】:Panda讀取的數值型數據,缺失數據顯示「NaN」(not a number)。數據值的處理方法主要就是兩種方法:【注意】缺失值的插補只能用於客觀數據。由於主觀數據受人的影響,其所涉及的真實值不能保證。簡單刪除法是對缺失值進行處理的最原始方法。它將存在缺失值的個案刪除。
  • 臨床研究中敏感性分析的統計思路與統計圖表
    敏感性分析涉及的內容包羅萬象,從數據的缺失值、離群值的不同處理策略,研究結局的不同定義,到不同的統計模型,以及相同統計模型裡的不同層次的協變量校正,研究人群劃分,亞組分析等均屬於敏感性分析的範疇[7]。有學者曾專門總結過臨床試驗中常用的敏感性分析的場景[7,8],其中大部分場景對觀察性研究仍然適用。
  • 機器學習之缺失值處理
    上篇對機器學習中的數據分析進行了詳細介紹,想了解的可以看上篇文章哈缺失值數據圖片比較小,其實這段時間的數據缺失值還是較多的(我是特意找了段缺失值多的數據,方便我們後面對比不同處理方法的結果,嘿嘿~~~),這裡面我們以temp_out欄位為例來進行下面的缺失值處理啦
  • 缺失數據別怕!這裡有份強大的初學者指南 - 讀芯術
    MNAR—缺失的值不是隨機丟失的,而是有原因的。通常,原因在於缺失值取決於假設值,或者取決於另一個變量的值。缺失的數據是隨機的嗎?如果數據隨機丟失,則將以不同於隨機丟失的數據的方式來處理數據。使用Little’sMCAR測試來確定數據是否隨機丟失。
  • SPSS 經典教材:基於回歸法填充缺失值
    ,尤其是大樣本臨床研究中是在所難免的。如何能夠合理得當地處理缺失值是至關重要的。缺失值的處理方法很多,包括直接去除,對於大樣本研究來說,直接去除可能對結果造成的影響尚可接受,但是對於樣本量不多的研究來講,可能就是很大的影響。對於缺失值插補的方法也很多,最常見的包括臨近值,均值,中位數,眾數,回歸,多重插補等。前三類的填補,因為缺少隨機誤差,填補顯得比較蒼白,後兩者,尤其是多重插補,因為考慮到存在隨機誤差,在填補效率方面顯得更加優秀。
  • 帶參數的無返回值(void)函數如何返回處理結果?(附代碼)
    在軟體開發過程中有一種很常見的編程方法,就是即使將參數傳給無返回值的void函數也能實現對原始參數值的修改,這句話到底說的什麼意思,且看示例。(附代碼)這是一個帶參數的普通函數,作用是統計字符串中的有效字符數('\0'不算有效字符),返回值即為字符串中的字符總數,類型為int,具體代碼入下:
  • 機器學習Kaggle入門,房價預測比賽
    來看看這些特徵的中文含義。(有點多,要不挑幾個看看好了,比如地上面積,地下室面積,車庫大小等)5.看看數據的統計是否有缺失值欄位太多,截取了開始的部分,共1460行數據記錄,如果統計的非空記錄少於1460,說明有預設值。