提问者:小点点

我试图在肝脏疾病数据集上建立一个随机森林分类器。但是fi方法返回一个错误:


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(最近的调用最后)在 () ----

C:\Users\abhir\Anaconda2\lib\site packages\sklearn\employee\forest。pyc拟合(自身、X、y、样本重量)244英寸245英寸验证或转换输入数据--

C:\Users\abhir\Anaconda2\lib\site packages\sklearn\utils\validation。检查数组中的pyc(数组、接受稀疏、数据类型、顺序、复制、强制所有有限、确保2d、允许nd、确保最小样本、确保最小特征、警告数据类型、估计器)400强制所有有限)401其他:--

ValueError:无法将字符串转换为float:Male

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


共1个答案

匿名用户

Scikit学习的随机森林分类器不支持分类数据,就像在你的情况下“性别”,值为“男性”和“女性”:详细信息请参见这个问题。

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

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'])]

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