日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

【scikit-learn基础】--『预处理』之 缺失值处理

發布時間:2023/12/24 windows 33 coder
生活随笔 收集整理的這篇文章主要介紹了 【scikit-learn基础】--『预处理』之 缺失值处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據的預處理是數據分析,或者機器學習訓練前的重要步驟。
通過數據預處理,可以

  • 提高數據質量,處理數據的缺失值、異常值和重復值等問題,增加數據的準確性和可靠性
  • 整合不同數據,數據的來源和結構可能多種多樣,分析和訓練前要整合成一個數據集
  • 提高數據性能,對數據的值進行變換,規約等(比如無量綱化),讓算法更加高效

本篇介紹的缺失值處理,是數據預處理中非常重要的一步,因為很多機器學習算法都假設數據是完整的,算法的執行過程中沒有考慮缺失值的影響。
所以,為了提高數據質量、改進數據分析結果、提高數據挖掘和機器學習的效果,缺失值處理必不可少。

1. 原理

處理缺失值的手段大致有4類

  1. 刪除存在缺失值數據行
  2. 填充缺失值
  3. 不處理缺失值
  4. 用深度學習方法處理

1.1. 刪除缺失值數據

刪除缺失值是最簡單的一種處理方式,不過,在某些情況下,這可能會導致數據的大量丟失。
如果數據丟失過多,可能會改變數據的分布,影響模型的準確性。

所以,只有在缺失值占比很小的情況下,才會考慮使用這種處理方式。
刪除缺失值用pandas庫的方法即可,比如:

import pandas as pd

df = pd.util.testing.makeMissingDataframe()
print("刪除前: {} 行".format(len(df)))

df = df.dropna()
print("刪除后: {} 行".format(len(df)))

# 運行結果
刪除前: 30 行
刪除后: 19 行

1.2. 填充缺失值

直接刪除存在缺失值的數據行雖然簡單,但是在實際應用中,使用的并不多。
實際情況下,使用最多的還是填充缺失值。

scikit-learn庫中,填充缺失值的方式主要有:

1.2.1. 均值填充

均值填充就是用缺失值所在列的平均值來填充缺失值。

from sklearn.impute import SimpleImputer

data = np.array([[1, 2, 3], [4, np.nan, 6], [7, 8, np.nan]])
print("均值填充前:\n{}".format(data))

imp = SimpleImputer(missing_values=np.nan, strategy="mean")
data = imp.fit_transform(data)
print("均值填充后:\n{}".format(data))

# 運行結果
均值填充前:
[[ 1.  2.  3.]
 [ 4. nan  6.]
 [ 7.  8. nan]]
均值填充后:
[[1.  2.  3. ]
 [4.  5.  6. ]
 [7.  8.  4.5]]

填充的54.5分別是第二列第三列的平均值。

1.2.2. 中位數填充

中位數填充就是用缺失值所在列的中位數來填充缺失值。

from sklearn.impute import SimpleImputer

data = np.array([[1, 2, 3], [4, np.nan, 6], [7, 8, np.nan], [10, 11, 12]])
print("中位數填充前:\n{}".format(data))

imp = SimpleImputer(missing_values=np.nan, strategy="median")
data = imp.fit_transform(data)
print("中位數填充后:\n{}".format(data))

# 運行結果
中位數填充前:
[[ 1.  2.  3.]
 [ 4. nan  6.]
 [ 7.  8. nan]
 [10. 11. 12.]]
中位數填充后:
[[ 1.  2.  3.]
 [ 4.  8.  6.]
 [ 7.  8.  6.]
 [10. 11. 12.]]

填充的86分別是第二列第三列的中位數。

1.2.3. 眾數填充

眾數填充就是用缺失值所在列的眾數數來填充缺失值。

from sklearn.impute import SimpleImputer

data = np.array([[1, 2, 3], [4, np.nan, 6], [7, 8, np.nan], [10, 8, 3]])
print("眾數填充前:\n{}".format(data))

imp = SimpleImputer(missing_values=np.nan, strategy="most_frequent")
data = imp.fit_transform(data)
print("眾數填充后:\n{}".format(data))

# 運行結果
眾數填充前:
[[ 1.  2.  3.]
 [ 4. nan  6.]
 [ 7.  8. nan]
 [10.  8.  3.]]
眾數填充后:
[[ 1.  2.  3.]
 [ 4.  8.  6.]
 [ 7.  8.  3.]
 [10.  8.  3.]]

填充的83分別是第二列第三列的眾數。

1.2.4. 常量填充

常量填充就是用指定的常量來填充缺失值。

from sklearn.impute import SimpleImputer

data = np.array([[1, 2, 3], [4, np.nan, 6], [7, 8, np.nan]])
print("常量填充前:\n{}".format(data))

imp = SimpleImputer(missing_values=np.nan, fill_value=100, strategy="constant")
data = imp.fit_transform(data)
print("常量填充后:\n{}".format(data))

# 運行結果
常量填充前:
[[ 1.  2.  3.]
 [ 4. nan  6.]
 [ 7.  8. nan]]
常量填充后:
[[  1.   2.   3.]
 [  4. 100.   6.]
 [  7.   8. 100.]]

缺失值用常量100填充了。

1.2.5. 插值填充

插值填充就是使用線性插值或多項式插值等方法,基于已知的數據點估計缺失值。

from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer

data = np.array([[1, 2, 3], [4, np.nan, 6], [7, 8, np.nan]])
print("插值填充前:\n{}".format(data))

imp = IterativeImputer(max_iter=10, random_state=0)
data = imp.fit_transform(data)
print("插值填充后:\n{}".format(data))

# 運行結果
插值填充前:
[[ 1.  2.  3.]
 [ 4. nan  6.]
 [ 7.  8. nan]]
插值填充后:
[[1.         2.         3.        ]
 [4.         5.00203075 6.        ]
 [7.         8.         8.99796726]]

1.2.6. K近鄰填充

K近鄰填充就是利用K近鄰算法,找到與缺失值最近的K個數據點,用它們的值的平均數或中位數來填充缺失值。

from sklearn.impute import KNNImputer  

data = np.array([[1, 2, 3], [4, np.nan, 6], [7, 8, np.nan], [10, 11, 12]])
print("K近鄰填充前:\n{}".format(data))

imp = KNNImputer(n_neighbors=2)  
data = imp.fit_transform(data)
print("K近鄰填充后:\n{}".format(data))

# 運行結果
K近鄰填充前:
[[ 1.  2.  3.]
 [ 4. nan  6.]
 [ 7.  8. nan]
 [10. 11. 12.]]
K近鄰填充后:
[[ 1.  2.  3.]
 [ 4.  5.  6.]
 [ 7.  8.  9.]
 [10. 11. 12.]]

2. 作用

缺失值處理的主要作用包括:

  1. 提高數據完整性和準確性:如果數據中存在缺失值,可能會影響分析的準確性,甚至導致錯誤的結論。因此,通過填補缺失值,我們可以確保數據的完整性和準確性。
  2. 提升數據質量:缺失值可能會降低數據的質量,使得數據分析變得更為困難。通過處理缺失值,我們可以提升數據的質量,使得分析結果更加可靠。
  3. 提高算法性能:許多機器學習和數據挖掘算法在處理不完整數據時性能會下降。處理缺失值可以使得這些算法更好地運行,提高其性能。
  4. 減少信息丟失:在某些情況下,缺失值可能代表著某些信息的丟失。通過對這些缺失值進行處理,我們可以盡量減少信息丟失的數量。
  5. 消除或減少噪聲:缺失值的存在可能會引入數據中的噪聲,這種噪聲可能會對數據分析產生干擾,甚至影響模型的訓練效果。通過填補這些缺失值,我們可以消除或減少這種噪聲。

3. 總結

在選擇處理缺失值的方法時,需要考慮數據的性質、缺失值的比例、數據的分布以及具體的分析任務等因素。
同時,不同的方法可能適用于不同的場景,需要結合具體情況進行選擇。

總結

以上是生活随笔為你收集整理的【scikit-learn基础】--『预处理』之 缺失值处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。