- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
docs对于 scikit-learn 的 Imputation transformer 说
When axis=0, columns which only contained missing values at fit are discarded upon transform.
由于 imputer 返回一个 numpy 数组,我如何检查哪些特征在插补过程中被丢弃,或者相应地,哪些特征在插补后被保留?
这是一个简单的例子:
import pandas as pd
import numpy as np
from sklearn.preprocessing import Imputer
df = pd.DataFrame(np.random.randn(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
df['f'] = len(df3)*['NaN']
这是数据框:
>>> df
a b c d e f
0 -1.284658 0.246541 -1.120987 0.559911 -1.189870 NaN
1 0.773717 0.430597 -0.004346 -1.292080 1.993266 NaN
2 1.418761 -0.004749 -0.181932 -0.305756 -0.135870 NaN
3 0.418673 -0.376318 -0.860783 0.074135 -1.034095 NaN
4 -0.019873 0.006210 0.364384 1.029895 -0.188727 NaN
5 0.903661 0.123575 -0.556970 1.344985 -1.109806 NaN
6 -0.069168 -0.385597 0.684345 0.645920 1.159898 NaN
7 0.695782 0.030239 -0.777304 -0.037102 2.053028 NaN
8 -0.256409 0.106735 -0.729710 0.254626 1.064925 NaN
9 0.235507 -0.087767 0.626121 1.391286 0.449158 NaN
现在我创建一个 imputer imp
:
imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
imp.fit(df)
imputed = imp.transform(df)
这是从插补返回的 numpy 数组。
>>> imputed
array([[-1.28465763, 0.24654083, -1.12098675, 0.55991059, -1.18986998],
[ 0.77371694, 0.43059674, -0.0043461 , -1.29208032, 1.99326594],
[ 1.41876145, -0.0047488 , -0.18193164, -0.30575631, -0.13586974],
[ 0.41867326, -0.37631792, -0.86078293, 0.07413458, -1.03409532],
最佳答案
如何检查插补过程中丢弃了哪些特征?
包含所有 NaN
的列将被丢弃。您可以在不通过 df.isnull().all()
的 fit
和 transform
过程的情况下进行检查。在 True
的地方,那些是将被丢弃的“特征”。
不过,确切的答案是像这样将 verbose=1
添加到您的 imputer 中:
imp = Imputer(verbose=1)
为了让这个例子更清楚发生了什么,向 df
添加另一列包含所有 NaN
。
df.insert(2, 'g', np.nan)
df
现在看起来像这样:
a b g c d e f
0 -1.284658 0.246541 NaN -1.120987 0.559911 -1.189870 NaN
1 0.773717 0.430597 NaN -0.004346 -1.292080 1.993266 NaN
2 1.418761 -0.004749 NaN -0.181932 -0.305756 -0.135870 NaN
3 0.418673 -0.376318 NaN -0.860783 0.074135 -1.034095 NaN
4 -0.019873 0.006210 NaN 0.364384 1.029895 -0.188727 NaN
5 0.903661 0.123575 NaN -0.556970 1.344985 -1.109806 NaN
6 -0.069168 -0.385597 NaN 0.684345 0.645920 1.159898 NaN
7 0.695782 0.030239 NaN -0.777304 -0.037102 2.053028 NaN
8 -0.256409 0.106735 NaN -0.729710 0.254626 1.064925 NaN
9 0.235507 -0.087767 NaN 0.626121 1.391286 0.449158 NaN
正在运行...
imp.fit(df)
imp.transform(df)
现在输出以下“详细”消息,告诉您删除了哪些列 [2 6]
:
Warning (from warnings module):
File "C:\Python34\lib\site-packages\sklearn\preprocessing\imputation.py", line 347
"observed values: %s" % missing)
UserWarning: Deleting features without observed values: [2 6]
array([[-1.284658, 0.246541, -1.120987, 0.559911, -1.18987 ],
[ 0.773717, 0.430597, -0.004346, -1.29208 , 1.993266],
[ 1.418761, -0.004749, -0.181932, -0.305756, -0.13587 ],
[ 0.418673, -0.376318, -0.860783, 0.074135, -1.034095],
[-0.019873, 0.00621 , 0.364384, 1.029895, -0.188727],
[ 0.903661, 0.123575, -0.55697 , 1.344985, -1.109806],
[-0.069168, -0.385597, 0.684345, 0.64592 , 1.159898],
[ 0.695782, 0.030239, -0.777304, -0.037102, 2.053028],
[-0.256409, 0.106735, -0.72971 , 0.254626, 1.064925],
[ 0.235507, -0.087767, 0.626121, 1.391286, 0.449158]])
插补后保留了哪些特征?
插补后保留的列和值。
使用我之前的 df
,如果我们添加一些 NaN
到组合中:
df.loc[[1, 7, 3], ['a', 'c', 'e']] = np.nan
df
看起来像这样:
a b g c d e f
0 -1.284658 0.246541 NaN -1.120987 0.559911 -1.189870 NaN
1 NaN 0.430597 NaN NaN -1.292080 NaN NaN
2 1.418761 -0.004749 NaN -0.181932 -0.305756 -0.135870 NaN
3 NaN -0.376318 NaN NaN 0.074135 NaN NaN
4 -0.019873 0.006210 NaN 0.364384 1.029895 -0.188727 NaN
5 0.903661 0.123575 NaN -0.556970 1.344985 -1.109806 NaN
6 -0.069168 -0.385597 NaN 0.684345 0.645920 1.159898 NaN
7 NaN 0.030239 NaN NaN -0.037102 NaN NaN
8 -0.256409 0.106735 NaN -0.729710 0.254626 1.064925 NaN
9 0.235507 -0.087767 NaN 0.626121 1.391286 0.449158 NaN
重要的是要了解您使用的是什么插补策略。 Imputer
的默认值是mean。这意味着它将用给定列的平均值替换 NaN
值。
为了证明这一点,首先检查每列的平均值:
>>> df.mean()
a 0.132546
b 0.008947
g NaN
c -0.130678
d 0.366582
e 0.007101
f NaN
dtype: float64
然后您可以进行拟合和转换,并查看转换后的估算数据中是否有任何值在 imp.statistics_
超参数中。
imp = Imputer(verbose=1)
imp.fit(df)
imp.transform(df)
返回以下内容 - 同样,需要注意的关键是 NaN
值已替换为给定列的 mean
。例如,无论您在第一列中看到 0.13254586
,您都会注意到它们出现在第 1、3 和 7 行(以前是 NaN
):
Warning (from warnings module):
File "C:\Python34\lib\site-packages\sklearn\preprocessing\imputation.py", line 347
"observed values: %s" % missing)
UserWarning: Deleting features without observed values: [2 6]
array([[-1.284658 , 0.246541 , -1.120987 , 0.559911 , -1.18987 ],
[ 0.13254586, 0.430597 , -0.13067843, -1.29208 , 0.00710114],
[ 1.418761 , -0.004749 , -0.181932 , -0.305756 , -0.13587 ],
[ 0.13254586, -0.376318 , -0.13067843, 0.074135 , 0.00710114],
[-0.019873 , 0.00621 , 0.364384 , 1.029895 , -0.188727 ],
[ 0.903661 , 0.123575 , -0.55697 , 1.344985 , -1.109806 ],
[-0.069168 , -0.385597 , 0.684345 , 0.64592 , 1.159898 ],
[ 0.13254586, 0.030239 , -0.13067843, -0.037102 , 0.00710114],
[-0.256409 , 0.106735 , -0.72971 , 0.254626 , 1.064925 ],
[ 0.235507 , -0.087767 , 0.626121 , 1.391286 , 0.449158 ]])
如果您想进行 bool 比较以查看估算了哪些值,您可以执行以下操作(不是万无一失,但最可靠的方法):
np.reshape(np.in1d(imp.transform(df), imp.statistics_), imp.transform(df).shape)
array([[False, False, False, False, False],
[ True, False, True, False, True],
[False, False, False, False, False],
[ True, False, True, False, True],
[False, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False],
[ True, False, True, False, True],
[False, False, False, False, False],
[False, False, False, False, False]], dtype=bool)
关于python - 检查 scikitlearn imputer 丢弃了哪些特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38277014/
我需要根据需要动态设置文本区域,但它不想正常工作。 JQuery 会自行检查,但无法检查是否已检查。但是当您在第二个单选框内单击时,始终需要文本区域。我尝试了很多次让它工作,但它仍然有问题。我添加了“
我需要在 Django 中进行 API 调用(某种形式),作为我们所需的自定义身份验证系统的一部分。用户名和密码通过 SSL 发送到特定 URL(对这些参数使用 GET),响应应该是 HTTP 200
我将在我的可移植 C 代码中使用 #warning 来生成编译时警告。但并非所有平台都支持 #warning。有什么方法可以找到该平台是否支持 #warning。 #ifdef warning
我编写了一个函数来检查某个数字是否存在于某个区间内。停止搜索的最佳方法是什么?这个: for (i = a; i <= b; i++) { fi = f(i); if (fi == c) {
我想知道在 c 中是否有一种方法可以检查,例如在 for 函数中,如果变量等于或不等于某些字符,而不必每次都重复进行相等性检查。如果我没记错的话,以这种方式检查相等性是不正确的: if (a == (
我有如下日志功能 void log_error(char * file_name, int line_num, int err_code) { printf("%s:%d:%s\n", fil
使用 ssh-keygen 生成的 key 对在 macOS 上可以有不同的格式。 macOS 可读的标准 PEM ASN.1 对象 SecKey API 带有文本标题的 PEM OpenSSH ke
我正在尝试编写一个 excel if 语句。我不熟悉使用 Excel 具有的所有额外功能。我正在使用一个名为 importXML() 的函数.我正在尝试检查我正在使用的函数是否生成“#VALUE!”错
有没有办法检查是否没有 AIO 写入给定文件?我在我的 Unix 类(class)上制作了一个项目,该项目将是一个上下文无关(基于 UDP)的国际象棋服务器,并且所有数据都必须存储在文件中。应用程序将
我有一个如下所示的函数: public Status execute() { Status status = doSomething(); if (status != Stat
我正在使用 Composer,我不希望 PhpStorm 在 vendor 文件夹上运行任何错误检查或检查,因为它对 vendor/中的某些代码显示误报composer/autoload_static
Chapel 的一个很好的特性是它区分了数组的域和它的分布。检查两个数组是否具有相同的域和分布(通常想要的)的最佳方法是什么? 我能看到的最好的方法是检查 D1==D2和 D1.dist==D2.di
在我的 JavaScript 函数中,我为所有输入、文本区域和选择字段提供实际值作为 initial_value: $('input, textarea, select').each(function
我正在编写一个分解为几个简单函数的 PHP 类。在构造函数中,它调用另一个名为 processFile 的函数。该函数调用 5 个私有(private)函数并进行检查。如果检查失败,它会将消息分配给
这个问题已经有答案了: How to detect if user it trying to open a link in a new tab? (2 个回答) 已关闭 7 年前。 我认为 JavaS
我正在浏览我们的代码库并看到很多这样的测试: declare @row_id int = ... declare @row_attribute string select @row_attribu
我正在声明一个用作比较的函数。我的问题是: 为什么条件充当语句? 为什么第 4 行可以工作,而第 5 行却不行? 我知道这段代码不切实际且未使用,但为什么编译器允许这种语法? 谷歌没有找到答案。但话又
到目前为止,我有一个带有空文本字段的 PHP Kontaktform,并使用以下命令检查了所需的字段: $name = check_input($_POST['name'], "请输入姓名。"); 现
目前,我能想到的合理检查的唯一方法没有臃肿的逻辑: if ( $value > 0 ) { // Okay } else { // Not Okay } 有没有更好的办法? 最佳答案
我正在尝试运行一个脚本,如果 i 存在(意味着存在 i 值,任何值)或其他部分,我希望运行其中的一部分如果i没有值就运行,有人可以启发我吗? 我说的是 for 循环,比如 for (var i=0;
我是一名优秀的程序员,十分优秀!