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 综合分类器 随机森林分类 梯度提升决策树分类 泰坦尼克号幸存者