- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章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需要从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)
可以看到,因为第二个样本的第一列特征3和第三列特征7,与第一行样本的第一列特征2和第三列特征8的欧氏距离最近,所以缺失值按照第一个样本来填充,填充值为4。那么n_neighbors=2呢?
imputer = KNNImputer(n_neighbors=2)imputer.fit_transform(data)
此时根据欧氏距离算出最近相邻的是第一行样本与第四行样本,此时的填充值就是这两个样本第二列特征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()
在这个数据集中,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())
在本文中,我们尝试用DiabetesPedigreeFunction与Age,对BloodPressure中的35个缺失值进行KNNImputer插补.
先来看一下缺失值都在哪几个样本:
null_index = diabetes_data_copy.loc[diabetes_data_copy["BloodPressure"].isnull(), :].indexnull_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())
可以看到现在BloodPressure中的35个缺失值消失了。我们看看具体填充后的数据(只截图了部分):
diabetes_data_copy.iloc[null_index]
到此,BloodPressure中的缺失值已经根据DiabetesPedigreeFunction与Age运用KNNImputer填充完成了。注意的是,对于非数值型特征需要先转换为数值型特征再进行KNNImputer填充操作,因为目前KNNImputer方法只支持数值型特征(ʘ̆ωʘ̥̆‖)՞.
原文链接:https://blog.csdn.net/wj1298250240/article/details/103600075 。
最后此篇关于python 如何通过KNN来填充缺失值的文章就讲到这里了,如果你想了解更多关于python 如何通过KNN来填充缺失值的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
padding:initial 比 padding:0 有什么优势吗?示例: textarea { padding: 0; } Hello, world! 最佳答案 它们的意思是一
我尝试通过按钮填充 JList,然后在先前填充的 Jlist 上使用 DoubleClick 填充 JTextField。 代码: private void extractUsedVariables
我正在尝试做 var width = ($(this).width() + $(this).css('padding-left') + $(this).css('padding-right' ));
我在导航中添加了悬停效果,遗憾的是悬停也影响了上面的文字。如何在不影响文本位置的情况下向导航添加悬停? 可悲的是,我找不到解决这个问题的方法。 HTML 模板:http://projects.help
我是 F# 初学者,下面代码中的 %-5s 和 %5s 有什么作用?我认为它提供了空间填充,但我不确定它是如何填充的? printfn "%-5s %5s" "a" "b" 当我尝试 prin
我需要选择带狗的用户(带 type 等于“狗”的宠物) var User = Waterline.Collection.extend({ identity: 'user', attribute
我一直在尝试让 Excel 在一组列上应用公式,然后将模式扩展到整个行集。 这导致了以下代码: For i = 0 To avgsheetNames.Count - 1 If Contains(CSt
随着 Flutter 2.0 的发布,FlatButton已被替换为 TextButton . 因此,填充属性不再直接可用,而是作为 ButtonStyle属性(property)。 我的问题是,我该
这似乎是一个简单的问题,但我已经尝试了一个小时,似乎无法弄清楚。 我要做的就是用 Canvas 填充 MainWindow。我找不到任何允许这样做的属性,我能想到的唯一方法是设置 Canvas.Wid
这是a website具有移动 View 。 网站宽度为 640 像素,但 iPhone 以 678 像素渲染文档。在 Android 中看起来很棒。 我添加了视口(viewport)元: 主体 C
我正在使用 GridBagLayout到(当前)显示两行。我知道这种布局对于这项任务来说太过分了,但我正在努力学习如何使用它。问题是我已将两个面板添加到两个单独的行中,并且内容周围存在巨大差距(请参见
我有以下代码已传递给我并创建多边形: var map; function initialize() { var myLatlng = new google.maps.LatLng(-36.4
我在 Jpanel 中有一些项目,然后将其推到顶部并用作基本搜索引擎的工具栏。我遇到一个问题,因为没有足够的空间,所以我的最后一个组合框没有显示。但是,左侧有很多空白空间,我需要移动所有内容来填充 J
我创建了带有阈值的二进制图像。如下图所示如何改变白色形状的颜色以使其可索引? 到目前为止,这是我的代码: void threshold() { cv::Mat src_8uc3_img = c
我有一个 JTable,我想知道是否有更好的方法来填充它,这是我的代码: //Metodo para llenar un jtable con datos de la base public stat
我想要做的是裁剪一个卷以删除所有不相关的数据。例如,假设我有一个 100x100x100 的体积,其中填充了 0,但其中的 50x50x50 体积则填充了 1。如何从原始体积中获得裁剪后的 50x50
因此,我正在创建一种对一组数字进行洗牌的方法,其想法是创建这些数字的总体。因此,我创建了一个循环,对数字进行洗牌,然后将其添加到数组列表中,但是经过一些调试语句后,我发现它确实对数字进行洗牌,但只将最
假设我有这两个类: public class A where T : IEntityWithID, new() { private static EntityInfo entityInfo =
我正在尝试添加用户输入的两个大整数作为字符串。当两个输入字符串的长度不同时,我尝试用零填充较短的数字,但它不起作用。因此,如果我输入 456 和 7,它会给出 3,前面有一些随机字符。感谢您的任何建议
这是我将内容打印到表格 View 的代码 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: Index
我是一名优秀的程序员,十分优秀!