最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 如何通過(guò)KNN來(lái)填充缺失值

 更新時(shí)間:2021年05月21日 12:09:43   作者:六mo神劍  
這篇文章主要介紹了python 通過(guò)KNN來(lái)填充缺失值的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

看代碼吧~

# 加載庫(kù)
import numpy as np
from fancyimpute import KNN
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import make_blobs
# 創(chuàng)建模擬特征矩陣
features, _ = make_blobs(n_samples = 1000,
                         n_features = 2,
                         random_state = 1)
# 標(biāo)準(zhǔn)化特征
scaler = StandardScaler()
standardized_features = scaler.fit_transform(features)
standardized_features
# 制造缺失值
true_value = standardized_features[0,0]
standardized_features[0,0] = np.nan
standardized_features
# 預(yù)測(cè)
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
# #對(duì)比真實(shí)值和預(yù)測(cè)值
print("真實(shí)值:", true_value)
print("預(yù)測(cè)值:", features_knn_imputed[0,0])
# 加載庫(kù)
import numpy as np
from fancyimpute import KNN
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import make_blobs
​
# 創(chuàng)建模擬特征矩陣
features, _ = make_blobs(n_samples = 1000,
                         n_features = 2,
                         random_state = 1)​
# 標(biāo)準(zhǔn)化特征
scaler = StandardScaler()
standardized_features = scaler.fit_transform(features)
standardized_features
# 制造缺失值
true_value = standardized_features[0,0]
standardized_features[0,0] = np.nan
standardized_features
# 預(yù)測(cè)
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
# #對(duì)比真實(shí)值和預(yù)測(cè)值
print("真實(shí)值:", true_value)
print("預(yù)測(cè)值:", features_knn_imputed[0,0])
真實(shí)值: 0.8730186113995938
預(yù)測(cè)值: 1.0955332713113226

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

在數(shù)據(jù)挖掘工作中,處理樣本中的缺失值是必不可少的一步。其中對(duì)于缺失值插補(bǔ)方法的選擇至關(guān)重要,因?yàn)樗鼤?huì)對(duì)最后模型擬合的效果產(chǎn)生重要影響。

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

下面,就讓我們用實(shí)際例子來(lái)看看KNNImputer是如何使用的吧‎

使用KNNImputer需要從scikit-learn中導(dǎo)入:

from sklearn.impute import KNNImputer

先來(lái)一個(gè)小例子開(kāi)開(kāi)胃,data中第二個(gè)樣本存在缺失值。

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

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

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

可以看到,因?yàn)榈诙€(gè)樣本的第一列特征3和第三列特征7,與第一行樣本的第一列特征2和第三列特征8的歐氏距離最近,所以缺失值按照第一個(gè)樣本來(lái)填充,填充值為4。那么n_neighbors=2呢?

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

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

接下來(lái)讓我們看一個(gè)實(shí)際案例,該數(shù)據(jù)集來(lái)自Kaggle皮馬人糖尿病預(yù)測(cè)的分類賽題,其中有不少缺失值,我們?cè)囋囉肒NNImputer進(jìn)行插補(bǔ)。

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", style="darkgrid")
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()

在這個(gè)數(shù)據(jù)集中,0值代表的就是缺失值,所以我們需要先將0轉(zhuǎn)化為nan值然后進(jìn)行缺失值處理。

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())

在本文中,我們嘗試用DiabetesPedigreeFunction與Age,對(duì)BloodPressure中的35個(gè)缺失值進(jìn)行KNNImputer插補(bǔ)。

先來(lái)看一下缺失值都在哪幾個(gè)樣本:

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

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())

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

diabetes_data_copy.iloc[null_index]

到此,BloodPressure中的缺失值已經(jīng)根據(jù)DiabetesPedigreeFunction與Age運(yùn)用KNNImputer填充完成了。注意的是,對(duì)于非數(shù)值型特征需要先轉(zhuǎn)換為數(shù)值型特征再進(jìn)行KNNImputer填充操作,因?yàn)槟壳癒NNImputer方法只支持?jǐn)?shù)值型特征(ʘ̆ωʘ̥̆‖)՞。

相關(guān)文章

  • Python?操作Excel-openpyxl模塊用法實(shí)例

    Python?操作Excel-openpyxl模塊用法實(shí)例

    openpyxl 模塊是一個(gè)讀寫(xiě) Excel 2010 文檔的 Python 庫(kù),如果要處理更早格式的 Excel 文 檔,需要用到額外的庫(kù),openpyxl 是一個(gè)比較綜合的工具,能夠同時(shí)讀取和修改 Excel 文檔,這篇文章主要介紹了Python?操作Excel-openpyxl模塊使用,需要的朋友可以參考下
    2023-05-05
  • Python 一篇文章看懂時(shí)間日期對(duì)象

    Python 一篇文章看懂時(shí)間日期對(duì)象

    學(xué)習(xí)每一門(mén)語(yǔ)言多多少少會(huì)用到與時(shí)間相關(guān)的東西,咱們今天呢就談一談Python中的時(shí)間與日期對(duì)象。在Python中時(shí)間對(duì)象一般可以用來(lái)測(cè)量效率。日期對(duì)象用來(lái)處理日期與字符串之間的關(guān)系
    2022-03-03
  • Python設(shè)計(jì)密碼強(qiáng)度校驗(yàn)程序

    Python設(shè)計(jì)密碼強(qiáng)度校驗(yàn)程序

    這篇文章主要介紹了Python如何設(shè)計(jì)密碼強(qiáng)度校驗(yàn)程序,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Python中導(dǎo)入csv數(shù)據(jù)文件的詳細(xì)示例教程

    Python中導(dǎo)入csv數(shù)據(jù)文件的詳細(xì)示例教程

    Python中的csv模塊是一種用于讀取和寫(xiě)入csv文件的模塊,csv可以用于將數(shù)據(jù)從文件或者其他來(lái)源導(dǎo)入到Python中進(jìn)行分析和處理,在這篇文章中,我們將全面介紹Python中如何導(dǎo)入csv文件,并將從多個(gè)方面進(jìn)行詳細(xì)探討,感興趣的朋友一起看看吧
    2024-03-03
  • 解決keras使用cov1D函數(shù)的輸入問(wèn)題

    解決keras使用cov1D函數(shù)的輸入問(wèn)題

    這篇文章主要介紹了解決keras使用cov1D函數(shù)的輸入問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • OpenMV與JSON編碼問(wèn)題解析

    OpenMV與JSON編碼問(wèn)題解析

    這篇文章主要介紹了OpenMV與JSON編碼,JSON是一種簡(jiǎn)潔高效的交換數(shù)據(jù)的格式,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2022-06-06
  • Django項(xiàng)目中動(dòng)態(tài)設(shè)置靜態(tài)文件路徑的全過(guò)程

    Django項(xiàng)目中動(dòng)態(tài)設(shè)置靜態(tài)文件路徑的全過(guò)程

    這篇文章主要給大家介紹了關(guān)于Django項(xiàng)目中動(dòng)態(tài)設(shè)置靜態(tài)文件路徑的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Python中turtle.write方法使用說(shuō)明

    Python中turtle.write方法使用說(shuō)明

    turtle模塊以面向?qū)ο蠛兔嫦蜻^(guò)程的方式提供turtle圖形基元,由于它使用Tkinter作為基礎(chǔ)圖形,因此需要安裝有Tk支持的Python版本,下面這篇文章主要給大家介紹了關(guān)于Python中turtle.write方法使用說(shuō)明的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • 詳解Django中異步任務(wù)之django-celery

    詳解Django中異步任務(wù)之django-celery

    這篇文章主要介紹了詳解Django中異步任務(wù)之django-celery,本文通過(guò)場(chǎng)景分析實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Python使用pyautocad+openpyxl處理cad文件示例

    Python使用pyautocad+openpyxl處理cad文件示例

    這篇文章主要介紹了Python使用pyautocad+openpyxl處理cad文件,結(jié)合實(shí)例形式分析了Python使用pyautocad與openpyxl模塊讀寫(xiě)cad文件相關(guān)應(yīng)用操作技巧,需要的朋友可以參考下
    2019-07-07

最新評(píng)論

邵武市| 金秀| 利辛县| 贞丰县| 南安市| 韶关市| 静宁县| 乌鲁木齐县| 响水县| 民勤县| 衡东县| 北碚区| 故城县| 永吉县| 吉林省| 保康县| 张家港市| 格尔木市| 高清| 南丹县| 高雄县| 高安市| 抚远县| 安图县| 闸北区| 肇州县| 浙江省| 文水县| 新宾| 岳池县| 宝应县| 巴青县| 永顺县| 石景山区| 文安县| 延长县| 无极县| 夏河县| 天长市| 广东省| 会东县|