Python 决策树分类器

Posted

技术标签:

【中文标题】Python 决策树分类器【英文标题】:Python Decicion Tree Classifier 【发布时间】:2018-10-20 01:23:08 【问题描述】:

尝试使用 scikit 包构建树分类器,但在获取分类器输入的正确格式时遇到问题..

import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

#import dataset
data = pd.read_table('Data/Breast.csv')
data.head(10)

  X=data[['clump_thickness','shape_uniformity','marginal_adhesion','epithelial_size','bare_nucleoli','bland_chromatin','normal_nucleoli','mitoses']]

X_train = X.values

Y = data[['class']]
Y_train = Y.values

model = DecisionTreeClassifier()
model 

model.fit(X_train,Y_train)

但我收到以下错误消息:

ValueError Traceback(最近调用 最后)在() ----> 1 个模型.fit(X_train,Y_train)

c:\users\tobias\appdata\local\programs\python\python36\lib\site-packages\sklearn\tree\tree.py 适合(self,X,y,sample_weight,check_input,X_idx_sorted) 第788章 第789章 --> 790 X_idx_sorted=X_idx_sorted) 791回归自我 第792章

c:\users\tobias\appdata\local\programs\python\python36\lib\site-packages\sklearn\tree\tree.py 适合(self,X,y,sample_weight,check_input,X_idx_sorted) 114 随机状态=检查随机状态(self.random_state) 115 如果检查输入: --> 116 X = check_array(X, dtype=DTYPE, accept_sparse="csc") 第117章 118 如果是稀疏(X):

c:\users\tobias\appdata\local\programs\python\python36\lib\site-packages\sklearn\utils\validation.py 在 check_array(array, accept_sparse, dtype, order, copy, force_all_finite,ensure_2d,allow_nd,ensure_min_samples, ensure_min_features、warn_on_dtype、估计器) 第431章 432 其他: --> 433 数组 = np.array(数组,dtype=dtype,order=order,copy=copy) 434 435 如果确保_2d:

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

我做错了什么? 我可以看到 X.values 是 dType = Object...

谢谢

【问题讨论】:

您是否尝试将您的列转换为numeric 几乎所有机器学习算法都期望数值矩阵作为输入。因此,您需要将输入数据集转换为数值或对其进行二值化(取决于您的数据和目标)... 谢谢,伙计们。为了耐心;-)。那里合适的方法是什么——比如 X.astype(int)?因为我试过了,但是没有用。你可以只做 int(X.values) 吗? 仅供参考 - 在玩了更多之后,我找到了一个解决方案,可以直接在熊猫框架上使用 astype 方法:X = data[['clump_thickness','size_uniformity','shape_uniformity','marginal_adhesion','epithelial_size','bland_chromatin','normal_nucleoli','mitoses']].astype('float32')Y = data[['class']].astype('int') 【参考方案1】:

尝试此操作以确保您传递整数,如果您的集合包含字符串或分类值,或者显示另一个问题,我将使用解决方案编辑此答案:

cols = ['clump_thickness','shape_uniformity','marginal_adhesion','epithelial_size','bare_nucleoli','bland_chromatin','normal_nucleoli','mitoses']
for col in cols:
     data[col] = data[col].astype('int') 
X.train = data[cols]
Y.train = data[['class]]

model = DecissionTreeClassifier()
model.fit(X_train,Y_train)

【讨论】:

以上是关于Python 决策树分类器的主要内容,如果未能解决你的问题,请参考以下文章

机器学习之路:python 综合分类器 随机森林分类 梯度提升决策树分类 泰坦尼克号幸存者

基于python的决策树能进行多分类吗

用 Python 检查决策树分类器的准确性

交互式决策树分类器

将 OneHotEncoder 用于决策树分类器中的分类特征

Sklearn 决策树分类器显示浮点错误 Python [不是重复的]