国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

處理缺失值的三個層級的方法總結

大數據 數據分析
缺失值是現實數據集中的常見問題,處理缺失值是數據預處理的關鍵步驟。缺失值可能由于各種原因而發生,例如數據的結構和質量、數據輸入錯誤、傳輸過程中的數據丟失或不完整的數據收集。

缺失值

缺失值是現實數據集中的常見問題,處理缺失值是數據預處理的關鍵步驟。缺失值可能由于各種原因而發生,例如數據的結構和質量、數據輸入錯誤、傳輸過程中的數據丟失或不完整的數據收集。這些缺失的值可能會影響機器學習模型的準確性和可靠性,因為它們可能會引入偏差并扭曲結果,有些模型甚至在在缺少值的情況下根本無法工作。所以在構建模型之前,適當地處理缺失值是必要的。

本文將展示如何使用三種不同級別的方法處理這些缺失值:

  • 初級:刪除,均值/中值插補,使用領域知識進行估計
  • 中級:回歸插補, K-Nearest neighbors (KNN) 插補
  • 高級:鏈式方程(MICE)的多元插補, MICEforest

檢查缺失的值

首先必須檢查每個特性中有多少缺失值。作為探索性數據分析的一部分,我們可以使用以下代碼來做到這一點:

導入pandas并在數據集中讀取它們,對于下面的示例,我們將使用葡萄酒質量數據集。

import pandas as pd
df = pd.read_csv('Wine_Quality.csv')

然后可以用下面的代碼行檢查缺失的值。

df.isnull().sum()

可以使用以下方法查看任何特性中包含缺失值的行:

df_filtered = df[df.isnull().any(axis=1)]
df_filtered.head()

現在我們可以開始處理這些缺失的值了。

初級方法

最簡單的方法是刪除行或列(特性)。這通常是在缺失值的百分比非常大或缺失值對分析或結果沒有顯著影響時進行的。

刪除缺少值的行。

df_droprows = df.dropna()
df_droprows.isnull().sum()

圖片

使用以下方法刪除列或特性:

df_dropcols = df.drop(columns=['type', 'fixed acidity', 'citric acid', 'volatile acidity', 'residual sugar', 'chlorides', 'pH', 'sulphates'])
df_dropcols.isnull().sum()

通過刪除行,我們最終得到一個更短的數據集。當刪除特征時,我們最終會得到一個完整的數據集,但會丟失某些特征。

print("Shape when dropping rows: ", df_droprows.shape)
print("Shape when dropping features: ", df_dropcols.shape)

這兩種方法都最直接的方法,而且都會導致丟失有價值的數據——所以一般情況下不建議使用。

均值/中值插補

下一個初級的方法是用特征的平均值或中值替換缺失的值。在這種情況下不會丟失特征或行。但是這種方法只能用于數值特征(如果使用平均值,我們應該確保數據集沒有傾斜或包含重要的異常值)。

比如下面用均值來計算缺失值:

df = df.fillna(df.mean())

現在讓我們檢查其中一個估算值:

df[df.index==86]

如果要用中值,可以使用:

df = df.fillna(df.median())
df[df.index==86]

可以看到這里中值和平均值還是有區別的。

眾數

與上面的方法一樣,該方法用特征的模式或最常見的值替換缺失的值。這種方法可以用于分類特征。

首先,讓我們檢查一下是否有一個類別占主導地位。我們可以通過value_counts方法來實現:

df['type'].value_counts()

可以看到有一個“白色”數量最多。因此可以用下面的方式進行填充:

df['type'] = df['type'].fillna(df['type'].mode())

Scikit-Learn的SimpleImputer類

也可以使用Scikit-learn的SimpleImputer類執行平均值、中值和眾數的插補。將策略設置為“mean”,“median”或“most_frequency”即可

df_numeric = df.drop(columns='type')
imputer_median = SimpleImputer(strategy='median')
imputer_median.fit(df_numeric)
df_imputed_median = pd.DataFrame(imputer_median.transform(df_numeric), columns=df_numeric.columns)
df_imputed_median.head()

我們也可以將策略設置為' constant ',并指定' fill_value '來填充一個常量值。

均值/中位數/眾數的優點:

  • 簡單和快速實現
  • 它保留了樣本量,并降低了下游分析(如機器學習模型)的偏差風險。
  • 與更復雜的方法相比,它的計算成本更低。

缺點:

  • 沒有說明數據的可變性或分布,可能會導致估算值不能代表真實值。
  • 可能會低估或高估缺失值,特別是在具有極端值或異常值的數據集中。
  • 減少方差和人為夸大相關系數在估算數據集。
  • 它假設缺失的值是完全隨機缺失(MCAR),這可能并不總是這樣

使用領域知識進行評估

處理缺失數據的另一種可能方法是使用基于領域知識或業務規則的估計來替換缺失的值。可以通過咨詢相關領域的專家,讓他們提供專業的見解,這樣能夠估算出合理和可信的缺失值。

但是這種方法并不一定在現實中就能夠很好的實施,因為我們需要專業的人士來確保它產生準確和可靠的估算,但是這樣的領域專家并不多。所以我們這里把它歸在初級方法中。

中級方法

還有一些稍微高級一些的技術來填充那些缺失的值,我們將使用預測模型來解決問題。但在此之前需要更好地理解缺失值的性質。

缺失值的類型

在我們繼續使用更高級的技術之前,需要考慮一下在數據集中可能遇到的缺失類型。數據集中有不同類型的缺失,了解缺失類型有助于確定合適的方法。以下是一些常見的類型:

完全隨機缺失( Missing Completely at Random):在這種類型中,缺失的值是完全隨機的,這意味著一個值缺失的概率不依賴于任何觀察到的或未觀察到的變量。例如,如果一個受訪者在調查中不小心跳過了一個問題,這就是MCAR。

隨機丟失(Missing at Random):在這種類型中,一個值缺失的概率取決于觀察到的變量,而不是值本身。例如,如果調查對象不太可能回答敏感問題,但不回答問題的傾向取決于可觀察到的變量(如年齡、性別和教育),那么這就是MAR。

非隨機丟失(Missing Not at Random):在這種類型中,一個值缺失的概率取決于未觀察到的變量,包括缺失值值本身。例如,如果抑郁程度較高的個體不太可能報告他們的抑郁水平,而不報告的傾向在數據中是無法觀察到的,那么這就是MNAR。

回歸插補

我們將使用一個回歸模型來對那些缺失的值進行有根據的猜測,通過分析數據集中的其他特征,并使用它們的相關性來填補。

在處理遵循某種模式(MAR或MCAR)的缺失數據時,回歸插補特別有用。因為當特征之間存在很強的相關性時,這種方法很有效。

我們這里將創建一個不包含分類特征的數據版本。然后以為每一列的缺失值擬合線性回歸模型。這里就需要使用Scikit-learn的線性回歸模塊。

import pandas as pd
from sklearn.linear_model import LinearRegression

# Read data
df = pd.read_csv('Wine_Quality.csv')

# Make sub dataframe with only numeric features
df = df.drop(columns='type')

# Separate the columns with missing values
missing_cols = df.columns[df.isna().any()].tolist()
non_missing_cols = list(set(df.columns) - set(missing_cols))

print(missing_cols)

# loop over each column with missing values
for col in missing_cols:
# Create a copy of the dataframe without missing values in the current column
df_temp = df.dropna(subset=[col] + non_missing_cols)

# Split the dataframe into features (X) and target variable (y)
X = df_temp[non_missing_cols]
y = df_temp[col]

# Create and fit a linear regression model
lr = LinearRegression()
lr.fit(X, y)

# Impute missing values in the current column using the fitted model
df.loc[df[col].isna(), col] = lr.predict(df.loc[df[col].isna(), non_missing_cols])

回歸插補的優點:

  • 可以處理大量缺失值。
  • 可以保留數據集的統計屬性,例如均值、方差和相關系數。
  • 可以通過減少偏差和增加樣本量來提高下游分析(例如機器學習模型)的準確性。

回歸插補的缺點:

  • 它假設缺失變量和觀察到的變量之間存在線性關系。
  • 如果缺失值不是隨機缺失 (MAR) 或完全隨機缺失 (MCAR),則可能會引入偏差。
  • 可能不適用于分類或有序變量。
  • 在計算上昂貴且耗時,尤其是對于大型數據集。

(KNN) 插補

另一種方法是聚類模型,例如K-最近鄰 (KNN) 來估計那些缺失值。這與回歸插補類似,只是使用不同的算法來預測缺失值。

import pandas as pd
from sklearn.impute import KNNImputer

# Read data
df = pd.read_csv('Wine_Quality.csv')

# Make sub dataframe with only numeric features
df = df.drop(columns='type')

# create a KNN imputer object
imputer = KNNImputer(n_neighbors=5)

# impute missing values using KNN
df = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)

圖片

這里我們就要介紹一個包fancyimpute,它包含了各種插補方法:

pip install fancyimpute

使用的方法如下:

# Import the necessary libraries
import numpy as np
import pandas as pd
from fancyimpute import KNN

# Load the dataset
df = pd.read_csv('Wine_Quality.csv')

# Drop non-numeric features
df = df.drop(columns='type')

# Get list of columns with missing values
missing_cols = df.columns[df.isna().any()].tolist()

# Create an instance of the KNN imputer
imputer = KNN()

# Fit and transform the imputer to the dataset
imputed_array = imputer.fit_transform(df[missing_cols])

# Replace the missing values in the original dataset
df[missing_cols] = imputed_array

# View the imputed dataset
df

KNN 插補的優點:

  • 可以捕獲變量之間復雜的非線性關系。
  • 不對數據的分布或變量之間的相關性做出假設。
  • 比簡單的插補方法(例如均值或中值插補)更準確,尤其是對于中小型數據集。

缺點:

  • 計算上可能很昂貴,尤其是對于大型數據集或高維數據。
  • 可能對距離度量的選擇和選擇的最近鄰居的數量敏感,這會影響準確性。
  • 對于高度傾斜或稀疏的數據表現不佳。

高級方法

通過鏈式方程 (MICE) 進行多元插補

MICE 是一種常用的估算缺失數據的方法。它的工作原理是將每個缺失值替換為一組基于模型的合理值,該模型考慮了數據集中變量之間的關系。

該算法首先根據其他完整的變量為數據集中的每個變量創建一個預測模型。然后使用相應的預測模型估算每個變量的缺失值。這個過程重復多次,每一輪插補都使用前一輪的插補值,就好像它們是真的一樣,直到達到收斂為止。

然后將多個估算數據集組合起來創建一個最終數據集,其中包含所有缺失數據的估算值。MICE 是一種強大而靈活的方法,可以處理具有許多缺失值和變量之間復雜關系的數據集。它已成為許多領域(包括社會科學、健康研究和環境科學)中填補缺失數據的流行選擇。

fancyimpute包就包含了這個方法的實現,我們可以直接拿來使用

import numpy as np
import pandas as pd
from fancyimpute import IterativeImputer

# Read data
df = pd.read_csv('Wine_Quality.csv')

# Convert type column to category (so that miceforest can handle as a categorical attribute rather than string)
df= df.drop(columns='type')

# Get list of columns with missing values
missing_cols = df.columns[df.isna().any()].tolist()

# Create an instance of the MICE algorithm
imputer = IterativeImputer()

# Fit the imputer to the dataset
imputed_array = imputer.fit_transform(df[missing_cols])

# Replace the missing values in the original dataset
df[missing_cols] = imputed_array

# View the imputed dataset
df

這個實現沒法對分類變量進行填充,那么對于分類變量怎么辦呢?

MICEforest

MICEforest 是 MICE的變體,它使用 lightGBM 算法來插補數據集中的缺失值,這是一個很奇特的想法,對吧。

我們可以使用 miceforest 包來實現它

pip install miceforest
#或
conda install -c conda-forge miceforest

使用也很簡單:

import pandas as pd
import miceforest as mf

# Read data
df = pd.read_csv('Wine_Quality.csv')

# Convert type column to category (so that miceforest can handle as a categorical attribute rather than string)
df['type'] = df['type'].astype('category')

# Create an instance of the MICE algorithm
imputer = mf.ImputationKernel(data=df,
save_all_iterations=True,
random_state=42)

# Fit the imputer to the dataset. Set number of iterations to 3
imputer.mice(3, verbose=True)

# Generate the imputed dataset
imputed_df = imputer.complete_data()

# View the imputed dataset
imputed_df

可以看到,分類變量 'type' 的缺失值已經被填充了

總結

我們這里介紹了三個層級的缺失值的處理方法,這三種方法的選擇將取決于數據集、缺失數據的數量和分析目標。也需要仔細考慮輸入缺失數據對最終結果的潛在影響。處理缺失數據是數據分析中的關鍵步驟,使用合適的填充方法可以幫助我們解鎖隱藏在數據中的見解,而從主題專家那里尋求輸入并評估輸入數據的質量有助于確保后續分析的有效性。

最后我們介紹的兩個python包的地址,有興趣的可以看看:

https://pypi.org/project/fancyimpute/

https://pypi.org/project/miceforest/

責任編輯:華軒 來源: DeepHub IMBA
相關推薦

2015-10-12 17:20:21

產品設計層級

2020-02-07 09:59:29

Python異常處理語言

2020-10-31 17:16:31

機器學習數據缺失數據科學

2020-11-02 10:54:18

機器學習技術人工智能

2009-06-26 10:10:00

Hibernate狀態

2011-04-01 14:14:42

SQL Server空值

2010-03-15 16:34:50

Python字典

2010-07-30 12:56:53

2021-12-01 11:32:51

數據驅動決策

2023-04-26 11:14:11

IT領導者遠程工作

2009-10-29 16:19:58

VB.NET文件操作

2011-05-23 18:17:54

增加外鏈

2013-10-14 15:36:44

流程

2023-08-03 09:02:32

LangChain開發GLM

2009-06-26 10:07:00

Hibernate狀態

2010-06-08 16:21:46

如何安裝Opensus

2010-02-04 16:14:56

Ubuntu QQ

2022-02-26 16:10:51

Figma設計工具

2022-02-14 10:42:41

移動端標簽設計用戶

2010-04-09 15:29:10

無線信號故障
點贊
收藏

51CTO技術棧公眾號

cao在线视频| 亚洲成**性毛茸茸| 亚洲欧美日韩区| 日日躁夜夜躁人人揉av五月天| 日韩国产专区| 这里只有精品免费| 免费看污污视频| 99re8这里有精品热视频免费| 久久免费精品视频| 国产色在线观看| 欧美日韩亚洲激情| 天天干在线影院| 久久影视一区二区| 白白操在线视频| 蜜臀91精品一区二区三区| julia一区二区中文久久94| 97精品视频| 亚洲a在线播放| 精品国产一区探花在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 中文字幕欧美人与畜| 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲中文字幕无码一区二区三区| 亚洲人www| 狠狠色噜噜狠狠色综合久 | 国产成+人+综合+亚洲欧洲| 国产网红在线观看| 午夜精品国产更新| 亚洲私人影吧| 色婷婷亚洲婷婷| 精品久久人人做人人爽| 怡红院在线播放| 精品电影一区二区| 黑人巨大精品| 色阁综合伊人av| 国产精品欧美一区二区三区不卡| 久久成人国产精品| 欧美aaaaaaaa牛牛影院| 国产精品福利网站| 97精品国产| 亚洲a区在线视频| 亚洲一区日本| 日本中文字幕亚洲| 亚洲免费观看在线观看| 91精彩在线视频| 亚洲欧洲国产一区| 日韩av网站在线免费观看| www.一区二区三区| 国产经典欧美精品| 97福利一区二区| 茄子视频成人免费观看| 91免费看视频| 国产字幕中文| 欧美性xxxxx极品娇小| 在线电影福利片| 日韩在线视频线视频免费网站| 成人福利一区| 97自拍视频| 久久超碰97人人做人人爱| 日韩福利视频在线| 欧美日韩亚洲天堂| 亚洲精品**中文毛片| 国内精品400部情侣激情| 一区二区三区午夜探花| 欧美日韩激情四射| 午夜国产精品影院在线观看| 亚洲婷婷在线| 麻豆一区二区三区在线观看| 中文字幕日本不卡| 欧美成人sm免费视频| 国产欧美自拍一区| 97香蕉久久超级碰碰高清版 | 2020日本不卡一区二区视频| 国产成人综合精品在线| 青娱乐极品盛宴一区二区| 一区二区三区四区精品| 麻豆免费在线| 精品国产第一区二区三区观看体验| 丁香婷婷激情网| 午夜在线精品偷拍| 欧美在线观看网址综合| 欧美成人免费电影| 日韩黄色av网站| 亚洲成人短视频| 国产精品天干天干在线综合| 手机亚洲第一页| 尤物tv国产一区| 欧美国产先锋| 精品伦理一区二区| 日本欧美精品在线| 欧美aaa大片视频一二区| 国产啪精品视频网站| 精品一区二区久久久| 欧洲免费在线视频| 97在线精品国自产拍中文| 久久99精品视频| 成人性生交大片免费看午夜 | 久久视频在线| 国产午夜伦鲁鲁| 欧美r级电影在线观看| 欧美韩国日本在线观看 | 丁香桃色午夜亚洲一区二区三区| yes4444视频在线观看| 欧美最近摘花xxxx摘花| 91色|porny| a级片在线免费观看| 电影午夜精品一区二区三区 | 欧美精品成人网| 日韩高清a**址| 亚洲大胆在线| 国产无遮挡在线视频免费观看| 久热国产精品视频| 精品一区二区三区的国产在线播放 | 91久久精品在线| 国产精品偷伦视频免费观看国产| 青青草成人在线观看| 中文字幕免费在线| 性金发美女69hd大尺寸| 国产999精品久久| 青青青草视频在线| 国产欧美丝袜| 一本久久a久久免费精品不卡| 性人久久久久| 9久久婷婷国产综合精品性色| 中文字幕在线观看亚洲| 久久99热国产| bbw在线视频| 色噜噜狠狠色综合网| 欧美一区二区久久| 宅男噜噜噜66国产日韩在线观看| 亚洲色图图片网| 成人午夜一级二级三级| 亚洲国产视频一区二区| 天海翼亚洲一区二区三区| 邪恶网站在线观看| 欧美日本中文字幕| 国产欧美日韩综合| 成人在线超碰| 国产小视频精品| 97国产一区二区精品久久呦 | 国产精品99久| 日韩免费小视频| 成人黄色大片网站| 久久久999国产| 国产欧美一区视频| 亚洲精华一区二区三区| 伊人资源视频在线| 亚洲综合社区网| 欧美日韩精品一二三区| 先锋影音久久久| 波多野结衣在线高清| 亚洲砖区区免费| 亚洲一区999| 久久久久久免费| 天天操综合520| 小明精品国产一区二区三区 | 欧美hd在线| 国产69精品久久app免费版| 欧美精品久久| 亚洲欧美制服综合另类| 欧美精彩视频一区二区三区| 成人观看网址| 91精品办公室少妇高潮对白| 精精国产xxx在线视频app| αv一区二区三区| 日韩av中文字幕在线| 久久综合色婷婷| 久久久久国产| 亚洲欧洲av| 香蕉久久久久久| 全部免费毛片在线播放网站| 91九色国产ts另类人妖| 久久精品国产亚洲精品2020| 午夜欧美一区二区三区在线播放| 成人黄色av| 欧美亚洲日本精品| 视频一区二区三区国产| 日本网站免费在线观看| 成人免费视频97| 亚州欧美在线| 国产精品毛片aⅴ一区二区三区| 在线视频你懂| 色一情一乱一伦一区二区三区日本| 国产成人av一区二区三区| 久久视频在线免费观看| 色8久久精品久久久久久蜜| 国产偷v国产偷v亚洲高清| 久久精品噜噜噜成人av农村| 国内一区二区三区| 欧美好骚综合网| 久久99久久人婷婷精品综合 | 蜜桃视频第一区免费观看| 五月天亚洲色图| aa亚洲一区一区三区| 69av成人| 丁香六月综合| 91嫩草国产线观看亚洲一区二区| 亚洲不卡系列| 亚洲**毛片| av一区二区高清|