电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python 如何通過KNN來填充缺失值

瀏覽:3日期:2022-06-18 18:02:54
看代碼吧~

# 加載庫import numpy as npfrom fancyimpute import KNNfrom sklearn.preprocessing import StandardScalerfrom 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.nanstandardized_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 npfrom fancyimpute import KNNfrom sklearn.preprocessing import StandardScalerfrom 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.nanstandardized_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 npimport pandas as pdimport pandas_profiling as ppimport matplotlib.pyplot as pltimport seaborn as snssns.set(context='notebook', style='darkgrid')import warningswarnings.filterwarnings(’ignore’)%matplotlib inline from sklearn.impute import KNNImputer

#Loading the datasetdiabetes_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(), :].indexnull_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來填充缺失值

到此,BloodPressure中的缺失值已經根據DiabetesPedigreeFunction與Age運用KNNImputer填充完成了。注意的是,對于非數值型特征需要先轉換為數值型特征再進行KNNImputer填充操作,因為目前KNNImputer方法只支持數值型特征(ʘ̆ωʘ̥̆‖)՞。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 数控车床-立式加工中心-多功能机床-小型车床-山东临沂金星机床有限公司 | LOGO设计_品牌设计_VI设计 - 特创易| 空调风机,低噪声离心式通风机,不锈钢防爆风机,前倾皮带传动风机,后倾空调风机-山东捷风风机有限公司 | 压力控制器,差压控制器,温度控制器,防爆压力控制器,防爆温度控制器,防爆差压控制器-常州天利智能控制股份有限公司 | 欧洲MV日韩MV国产_人妻无码一区二区三区免费_少妇被 到高潮喷出白浆av_精品少妇自慰到喷水AV网站 | 临沂招聘网_人才市场_招聘信息_求职招聘找工作请认准【马头商标】 | 手持式浮游菌采样器-全排二级生物安全柜-浙江孚夏医疗科技有限公司 | 汽液过滤网厂家_安平县银锐丝网有限公司| 仓储货架_南京货架_钢制托盘_仓储笼_隔离网_环球零件盒_诺力液压车_货架-南京一品仓储设备制造公司 | 一氧化氮泄露报警器,二甲苯浓度超标报警器-郑州汇瑞埔电子技术有限公司 | 多物理场仿真软件_电磁仿真软件_EDA多物理场仿真软件 - 裕兴木兰 | 亿立分板机_曲线_锯片式_走刀_在线式全自动_铣刀_在线V槽分板机-杭州亿协智能装备有限公司 | 焊锡丝|焊锡条|无铅锡条|无铅锡丝|无铅焊锡线|低温锡膏-深圳市川崎锡业科技有限公司 | 成都网站建设制作_高端网站设计公司「做网站送优化推广」 | 体感VRAR全息沉浸式3D投影多媒体展厅展会游戏互动-万展互动 | 穿线管|波纹穿线管|包塑金属软管|蛇皮管?闵彬专注弱电工程? | 磁棒电感生产厂家-电感器厂家-电感定制-贴片功率电感供应商-棒形电感生产厂家-苏州谷景电子有限公司 | 深圳市宏康仪器科技有限公司-模拟高空低压试验箱-高温防爆试验箱-温控短路试验箱【官网】 | 智能电表|预付费ic卡水电表|nb智能无线远传载波电表-福建百悦信息科技有限公司 | 分类168信息网 - 分类信息网 免费发布与查询| 天一线缆邯郸有限公司_煤矿用电缆厂家_矿用光缆厂家_矿用控制电缆_矿用通信电缆-天一线缆邯郸有限公司 | 智能门锁电机_智能门锁离合器_智能门锁电机厂家-温州劲力智能科技有限公司 | 医用空气消毒机-医用管路消毒机-工作服消毒柜-成都三康王 | 超声波破碎仪-均质乳化机(供应杭州,上海,北京,广州,深圳,成都等地)-上海沪析实业有限公司 | 天津力值检测-天津管道检测-天津天诚工程检测技术有限公司 | 防弹玻璃厂家_防爆炸玻璃_电磁屏蔽玻璃-四川大硅特玻科技有限公司 | 档案密集架_电动密集架_移动密集架_辽宁档案密集架-盛隆柜业厂家现货批发销售价格公道 | 骁龙云呼电销防封号系统-axb电销平台-外呼稳定『免费试用』 | 工装定制/做厂家/公司_工装订做/制价格/费用-北京圣达信工装 | cnc精密加工_数控机械加工_非标平键定制生产厂家_扬州沃佳机械有限公司 | 安徽合肥项目申报咨询公司_安徽合肥高新企业项目申报_安徽省科技项目申报代理 | 水平筛厂家-三轴椭圆水平振动筛-泥沙震动筛设备_山东奥凯诺矿机 包装设计公司,产品包装设计|包装制作,包装盒定制厂家-汇包装【官方网站】 | 手术室净化厂家-成都做医院净化工程的公司-四川华锐-15年特殊科室建设经验 | 屏蔽服(500kv-超高压-特高压-电磁)-徐吉电气 | 国产液相色谱仪-超高效液相色谱仪厂家-上海伍丰科学仪器有限公司 | 塑料异型材_PVC异型材_封边条生产厂家_PC灯罩_防撞扶手_医院扶手价格_东莞市怡美塑胶制品有限公司 | 雨燕360体育免费直播_雨燕360免费NBA直播_NBA篮球高清直播无插件-雨燕360体育直播 | 纳米二氧化硅,白炭黑,阴离子乳化剂-臻丽拾科技 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 体视显微镜_荧光生物显微镜_显微镜报价-微仪光电生命科学显微镜有限公司 | 苏商学院官网 - 江苏地区唯一一家企业家自办的前瞻型、实操型商学院 |