我正在尝试在肝病数据集上构建一个随机森林分类器。但是 fit 方法返回一个错误,如下所示:

Posted

技术标签:

【中文标题】我正在尝试在肝病数据集上构建一个随机森林分类器。但是 fit 方法返回一个错误,如下所示:【英文标题】:I'm trying to build a random forest classifier upon a liver disorder data set. But the fit method returns an error as such: 【发布时间】:2018-02-18 01:04:47 【问题描述】:
from sklearn.ensemble import RandomForestClassifier
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.read_csv("data.csv")
df['is_train'] = np.random.uniform(0,1,len(df)) <= 0.75
train, test = df[df['is_train'] == True], df[df['is_train'] == False]
features = df.columns[:10]
y = pd.factorize(train['Selector'])[0]
clf = RandomForestClassifier(n_jobs = 2, random_state = 0)
clf.fit(train[features],y)

ValueError Traceback(最近调用 最后)在() ----> 1 clf.fit(train[features],y)

C:\Users\abhir\Anaconda2\lib\site-packages\sklearn\ensemble\forest.pyc 适合(自我,X,y,sample_weight) 第244章 245 # 验证或转换输入数据 --> 246 X = check_array(X, accept_sparse="csc", dtype=DTYPE) 247 y = check_array(y,accept_sparse='csc',ensure_2d=False,dtype=None) 248 如果 sample_weight 不是 None:

C:\Users\abhir\Anaconda2\lib\site-packages\sklearn\utils\validation.pyc 在 check_array(array, accept_sparse, dtype, order, copy, force_all_finite,ensure_2d,allow_nd,ensure_min_samples, ensure_min_features、warn_on_dtype、估计器) 第400章 401 其他: --> 402 数组 = np.array(数组,dtype=dtype,order=order,copy=copy) 403 404 if ensure_2d:

ValueError: 无法将字符串转换为浮点数:Male


关于为什么会发生这种情况以及如何解决这个问题的任何帮助?链接到dataset

【问题讨论】:

【参考方案1】:

Scikit learn 的 RandomForestClassifier 不支持分类数据,例如在您的情况下,“性别”的值为“男性”和“女性”:有关详细信息,请参阅 this 问题。

要解决这个问题,您可以使用标签编码器对分类变量进行编码:

from sklearn import preprocessing

le = preprocessing.LabelEncoder()
le.fit(['Male', 'Female'])
df.loc[:,'gender'] =  le.transform(df['gender'])

数据集还在 Alkphos 列中包含一些 NaN,您需要在训练分类器之前处理这些 NaN。最简单但不一定是最好的选择是删除缺失值的数据集:

df = df[np.isfinite(df['Alkphos'])]

您需要在将数据拆分为训练集和测试集之前进行此预处理,因此两个数据集都经过相同的转换和过滤。

【讨论】:

以上是关于我正在尝试在肝病数据集上构建一个随机森林分类器。但是 fit 方法返回一个错误,如下所示:的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中的大型数据集上训练随机森林?

随机森林分类器

具有一个随机类的数据集上的 CNN 分类器

随机森林

R语言构建随机森林模型randomForest分类模型并评估模型在测试集和训练集上的效果(accurayF1偏差Deviance):随机森林在Bagging算法的基础上加入了列采样(分枝特征随机)

随机森林的混合预测器类型