中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在python中通過KNN來填充缺失值

發布時間:2021-05-21 15:27:34 來源:億速云 閱讀:429 作者:Leah 欄目:開發技術

怎么在python中通過KNN來填充缺失值?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

# 加載庫
import numpy as np
from fancyimpute import KNN
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import make_blobs
# 創建模擬特征矩陣
features, _ = make_blobs(n_samples = 1000,
                         n_features = 2,
                         random_state = 1)
# 標準化特征
scaler = StandardScaler()
standardized_features = scaler.fit_transform(features)
standardized_features
# 制造缺失值
true_value = standardized_features[0,0]
standardized_features[0,0] = np.nan
standardized_features
# 預測
features_knn_imputed = KNN(k=5, verbose=0).fit_transform(standardized_features)
# features_knn_imputed = KNN(k=5, verbose=0).complete(standardized_features)
features_knn_imputed
# #對比真實值和預測值
print("真實值:", true_value)
print("預測值:", features_knn_imputed[0,0])
# 加載庫
import numpy as np
from fancyimpute import KNN
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import make_blobs

# 創建模擬特征矩陣
features, _ = make_blobs(n_samples = 1000,
                         n_features = 2,
                         random_state = 1)
# 標準化特征
scaler = StandardScaler()
standardized_features = scaler.fit_transform(features)
standardized_features
# 制造缺失值
true_value = standardized_features[0,0]
standardized_features[0,0] = np.nan
standardized_features
# 預測
features_knn_imputed = KNN(k=5, verbose=0).fit_transform(standardized_features)
# features_knn_imputed = KNN(k=5, verbose=0).complete(standardized_features)
features_knn_imputed
# #對比真實值和預測值
print("真實值:", true_value)
print("預測值:", features_knn_imputed[0,0])
真實值: 0.8730186113995938
預測值: 1.0955332713113226

補充:scikit-learn中一種便捷可靠的缺失值填充方法:KNNImputer

在數據挖掘工作中,處理樣本中的缺失值是必不可少的一步。其中對于缺失值插補方法的選擇至關重要,因為它會對最后模型擬合的效果產生重要影響。

在2019年底,scikit-learn發布了0.22版本,此次版本除了修復之前的一些bug外,還更新了很多新功能,對于數據挖掘人員來說更加好用了。其中我發現了一個新增的非常好用的缺失值插補方法:KNNImputer。這個基于KNN算法的新方法使得我們現在可以更便捷地處理缺失值,并且與直接用均值、中位數相比更為可靠。利用“近朱者赤”的KNN算法原理,這種插補方法借助其他特征的分布來對目標特征進行缺失值填充。

下面,就讓我們用實際例子來看看KNNImputer是如何使用的吧?

使用KNNImputer需要從scikit-learn中導入:

from sklearn.impute import KNNImputer

先來一個小例子開開胃,data中第二個樣本存在缺失值。

data = [[2, 4, 8], [3, np.nan, 7], [5, 8, 3], [4, 3, 8]]

KNNImputer中的超參數與KNN算法一樣,n_neighbors為選擇“鄰居”樣本的個數,先試試n_neighbors=1。

imputer = KNNImputer(n_neighbors=1)
imputer.fit_transform(data)

怎么在python中通過KNN來填充缺失值

可以看到,因為第二個樣本的第一列特征3和第三列特征7,與第一行樣本的第一列特征2和第三列特征8的歐氏距離最近,所以缺失值按照第一個樣本來填充,填充值為4。那么n_neighbors=2呢?

imputer = KNNImputer(n_neighbors=2)
imputer.fit_transform(data)

怎么在python中通過KNN來填充缺失值

此時根據歐氏距離算出最近相鄰的是第一行樣本與第四行樣本,此時的填充值就是這兩個樣本第二列特征4和3的均值:3.5。

接下來讓我們看一個實際案例,該數據集來自Kaggle皮馬人糖尿病預測的分類賽題,其中有不少缺失值,我們試試用KNNImputer進行插補。

import numpy as np
import pandas as pd
import pandas_profiling as pp
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(context="notebook", )
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline
 
from sklearn.impute import KNNImputer
#Loading the dataset
diabetes_data = pd.read_csv('pima-indians-diabetes.csv')
diabetes_data.columns = ['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 
                       'Insulin', 'BMI', 'DiabetesPedigreeFunction', 'Age', 'Outcome']
diabetes_data.head()

怎么在python中通過KNN來填充缺失值

在這個數據集中,0值代表的就是缺失值,所以我們需要先將0轉化為nan值然后進行缺失值處理。

diabetes_data_copy = diabetes_data.copy(deep=True)
diabetes_data_copy[['Glucose','BloodPressure','SkinThickness','Insulin','BMI']] = diabetes_data_copy[['Glucose','BloodPressure','SkinThickness','Insulin','BMI']].replace(0, np.NaN)
 
print(diabetes_data_copy.isnull().sum())

怎么在python中通過KNN來填充缺失值

在本文中,我們嘗試用DiabetesPedigreeFunction與Age,對BloodPressure中的35個缺失值進行KNNImputer插補。

先來看一下缺失值都在哪幾個樣本:

null_index = diabetes_data_copy.loc[diabetes_data_copy['BloodPressure'].isnull(), :].index
null_index

怎么在python中通過KNN來填充缺失值

imputer = KNNImputer(n_neighbors=10)
diabetes_data_copy[['BloodPressure', 'DiabetesPedigreeFunction', 'Age']] = imputer.fit_transform(diabetes_data_copy[['BloodPressure', 'DiabetesPedigreeFunction', 'Age']])
print(diabetes_data_copy.isnull().sum())

怎么在python中通過KNN來填充缺失值

可以看到現在BloodPressure中的35個缺失值消失了。我們看看具體填充后的數據(只截圖了部分):

diabetes_data_copy.iloc[null_index]

怎么在python中通過KNN來填充缺失值

python主要應用領域有哪些

1、云計算,典型應用OpenStack。2、WEB前端開發,眾多大型網站均為Python開發。3.人工智能應用,基于大數據分析和深度學習而發展出來的人工智能本質上已經無法離開python。4、系統運維工程項目,自動化運維的標配就是python+Django/flask。5、金融理財分析,量化交易,金融分析。6、大數據分析。

看完上述內容,你們掌握怎么在python中通過KNN來填充缺失值的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

延边| 无为县| 勐海县| 济南市| 金门县| 调兵山市| 石河子市| 高州市| 井陉县| 英德市| 海林市| 肥乡县| 荆州市| 晴隆县| 崇信县| 斗六市| 香河县| 榆树市| 安图县| 宁城县| 故城县| 巴里| 长岭县| 恩平市| 舞钢市| 荔波县| 城口县| 宣恩县| 乌兰察布市| 清徐县| 沙坪坝区| 龙岩市| 桃园县| 民权县| 沙雅县| 潜山县| 临泽县| 固安县| 德化县| 城口县| 稻城县|