gpt4 book ai didi

python - scikit-learn 中处理 nan/null 的分类器

转载 作者:IT老高 更新时间:2023-10-28 21:55:30 25 4
gpt4 key购买 nike

我想知道在 scikit-learn 中是否有处理 nan/null 值的分类器。我认为随机森林回归器可以处理这个问题,但是当我调用 predict 时出现错误。

X_train = np.array([[1, np.nan, 3],[np.nan, 5, 6]])
y_train = np.array([1, 2])
clf = RandomForestRegressor(X_train, y_train)
X_test = np.array([7, 8, np.nan])
y_pred = clf.predict(X_test) # Fails!

我不能用任何缺少值的 scikit-learn 算法调用 predict 吗?

编辑。现在想来,这也是有道理的。在训练期间这不是问题,但是当您预测变量为空时如何分支时?也许您可以将两种方式分开并平均结果?只要距离函数忽略空值,k-NN 似乎应该可以正常工作。

编辑 2(年长且聪明的我)一些 gbm 库(例如 xgboost)正是为此目的使用三叉树而不是二叉树:2 个 child 用于是/否决策,1 个 child 用于缺失决策。 sklearn 是 using a binary tree

最佳答案

我做了一个例子,其中包含训练和测试集中的缺失值

我刚刚选择了一种策略,使用 SimpleImputer 类将缺失数据替换为均值。还有其他策略。

from __future__ import print_function

import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.impute import SimpleImputer


X_train = [[0, 0, np.nan], [np.nan, 1, 1]]
Y_train = [0, 1]
X_test_1 = [0, 0, np.nan]
X_test_2 = [0, np.nan, np.nan]
X_test_3 = [np.nan, 1, 1]

# Create our imputer to replace missing values with the mean e.g.
imp = SimpleImputer(missing_values=np.nan, strategy='mean')
imp = imp.fit(X_train)

# Impute our data, then train
X_train_imp = imp.transform(X_train)
clf = RandomForestClassifier(n_estimators=10)
clf = clf.fit(X_train_imp, Y_train)

for X_test in [X_test_1, X_test_2, X_test_3]:
# Impute each test item, then predict
X_test_imp = imp.transform(X_test)
print(X_test, '->', clf.predict(X_test_imp))

# Results
[0, 0, nan] -> [0]
[0, nan, nan] -> [0]
[nan, 1, 1] -> [1]

关于python - scikit-learn 中处理 nan/null 的分类器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30317119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com