數據集中的缺失值是指數據集中某些變數或者屬性的取值為空或者未知,這種情況在數據挖掘和機器學習中經常會遇到。在進行數據挖掘和機器學習時,缺失值會對結果產生負面影響,因此需要有效地處理數據集中的缺失值。
一、全面了解缺失值
了解缺失值是什麼,以及對結果和數據挖掘/機器學習模型有何影響,是第一步。缺失值有以下幾類:
1. 完全隨機缺失(MCAR):缺失值不受任何因素影響,缺失值出現是完全隨機的。在這種情況下,數據被刪除或者進行插值處理都是有效的方法。
2. 隨機缺失(MAR):缺失值的出現是由於另外的觀測結果而產生的。在這種情況下,需要使用預測模型進行插值或者直接刪除帶有缺失值的觀測。
3. 非隨機缺失(MNAR):缺失值取決於丟失數據的變數值。在這種情況下,需要使用更加複雜的模型來進行處理。
二、查找缺失值
在處理缺失值之前,需要先查找缺失值出現的位置和數量。Pandas是一種常用的Python庫,可以方便地檢查數據集中的缺失值。以下是查找缺失值的示例代碼:
import pandas as pd
import numpy as np
data = pd.read_csv('data.csv')
print(data.isnull().sum())
其中,isnull()函數會返回一個值為True或者False的矩陣,值為True表示數據集中對應位置存在缺失值,使用sum()函數可返回每列中缺失值的數量。
三、處理缺失值
1. 刪除帶有缺失值的行
對於完全隨機缺失的數據,可以使用刪除行的方法進行處理。以下是使用Pandas進行行刪除的示例代碼:
import pandas as pd
data = pd.read_csv('data.csv')
data = data.dropna(axis=0)
其中,axis=0表示刪除行。
2. 刪除帶有缺失值的列
對於某些列缺失值過多的數據,可以使用刪除列的方法進行處理。以下是使用Pandas進行列刪除的示例代碼:
import pandas as pd
data = pd.read_csv('data.csv')
data = data.dropna(thresh=0.9*len(data),axis=1)
其中,thresh參數表示該列中缺失值的比例閾值,axis=1表示刪除列。
3. 插值法
對於隨機缺失的數據,可以使用插值法進行填充。插值法是通過已知的數據來推斷未知數據的方法。以下是使用Pandas進行插值處理的示例代碼:
import pandas as pd
data = pd.read_csv('data.csv')
data = data.interpolate(method='linear', axis=0)
其中,method參數表示使用的插值方法,’linear’表示使用線性插值法。
4. 使用回歸模型
對於MNAR的數據,可以使用回歸模型進行處理。以下是使用線性回歸模型進行處理的示例代碼:
from sklearn.linear_model import LinearRegression
import pandas as pd
import numpy as np
data = pd.read_csv('data.csv')
data_train = data.dropna(axis=0)
data_test = data.loc[data.index.difference(data_train.index),:]
x_train = data_train.iloc[:,:-1]
y_train = data_train.iloc[:,-1]
x_test = data_test.iloc[:,:-1]
y_test = data_test.iloc[:,-1]
reg = LinearRegression().fit(x_train, y_train)
y_pred = reg.predict(x_test)
data_test['y'] = y_pred
data = pd.concat([data_train, data_test])
其中,使用dropna()函數刪除帶有缺失值的行,使用loc()函數查找缺失值所在行,使用LinearRegression()函數生成回歸模型,使用fit()函數進行擬合,使用predict()函數進行預測。
四、總結
在數據挖掘和機器學習中,缺失值對結果產生的負面影響非常大,因此需要進行有效的處理。本文介紹了查找、刪除、插值和使用回歸模型進行缺失值處理的方法。在處理缺失值時,需要考慮數據的類型、缺失值的出現方式、缺失值的位置等多個因素,並採取不同的方法進行處理。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/231668.html