我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么在python中通过KNN来填充缺失值

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么在python中通过KNN来填充缺失值

怎么在python中通过KNN来填充缺失值?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

# 加载库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", )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来填充缺失值

python主要应用领域有哪些

1、云计算,典型应用OpenStack。2、WEB前端开发,众多大型网站均为Python开发。3.人工智能应用,基于大数据分析和深度学习而发展出来的人工智能本质上已经无法离开python。4、系统运维工程项目,自动化运维的标配就是python+Django/flask。5、金融理财分析,量化交易,金融分析。6、大数据分析。

看完上述内容,你们掌握怎么在python中通过KNN来填充缺失值的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网行业资讯频道,感谢各位的阅读!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么在python中通过KNN来填充缺失值

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么在python中通过KNN来填充缺失值

怎么在python中通过KNN来填充缺失值?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。# 加载库import numpy as npfrom fancyimpute impo
2023-06-15

python 如何通过KNN来填充缺失值

看代码吧~# 加载库 import numpy as np from fancyimpute import KNN from sklearn.preprocessing import StandardScaler from sklearn.
2022-06-02

python之怎么使用fillna()填充缺失值

本篇内容主要讲解“python之怎么使用fillna()填充缺失值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python之怎么使用fillna()填充缺失值”吧!使用fillna()填充缺失
2023-07-02

怎么通过Java实现在Word中创建可填充表单

这篇文章主要讲解了“怎么通过Java实现在Word中创建可填充表单”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么通过Java实现在Word中创建可填充表单”吧!程序环境方法1:手动引入。
2023-07-05

如何在Python中进行数据缺失值处理和填充的最佳实践和算法选择

如何在Python中进行数据缺失值处理和填充的最佳实践和算法选择引言数据分析中常常会遇到缺失值的情况。缺失值的存在可能会严重影响数据分析和模型训练的结果。因此,对于缺失值的处理和填充成为了数据分析的重要一环。本文将介绍在Python中进行数
2023-10-22

python在列表中怎么通过索引取值

在Python中,可以通过索引来访问列表中的值。索引是一个整数,表示列表中元素的位置。索引从0开始,依次递增。可以使用方括号 [] 操作符来获取列表中指定索引位置的元素。以下是一个示例代码:my_list = [10, 20, 30,
2023-10-27

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录