【发布时间】:2019-07-11 18:22:04
【问题描述】:
我正在研究语言数据以训练分类器(决策树)。数据为csv格式,制表符分隔,62000行11列。
数据样本:
target_lemma target_pos left_word left_word_pos right_word right_word_pos parrent_word parrent_word_pos arg_word arg_word_pos label```
form VBZ %% %% forms VBZ forms VBZ forms VBZ N```
form VBZ provINce NN %% %% forms VBZ forms VBZ N```
form VBZ The DT %% %% forms VBZ provINce NN N```
- 在此数据中,Null 被替换为 %%。
- 前 10 个值是特征
- 最后一个值为 N 或 Y 的标签。
决策树会给出错误,因为它期望特征是 int 或 float 值。为了解决这个问题,我使用 one-hot 编码器对数据进行了编码,它在 80,20 分割的数据上运行良好。
当我给它一个没有标签的用户输入时,真正的问题就出现了。我将输入转换为 one-hot 编码数据并将其传递给预测器。 它给了我一个值错误,说特征的数量不是 man_features 是 11823,而 input_features 是 10。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn.feature_extraction import FeatureHasher
h = FeatureHasher(input_type='string')
balance_data = pd.read_csv('identifier-tab.csv',
delimiter='\t',
encoding="ISO-8859-1")
# Splitting Dataset
Y = balance_data.label
X = balance_data.drop(columns='label')
X = pd.get_dummies(X)
Y = pd.get_dummies(Y)
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=100)
print(X_test)
# Gini
clf_gini = DecisionTreeClassifier(criterion="gini", random_state=100, max_depth=9, min_samples_leaf=9)
clf_gini.fit(X_train, y_train)
y_pred = clf_gini.predict(X_test)
print("Gini Predicted values:")
print(y_pred)
print("Gini Accuracy: ", accuracy_score(y_test, y_pred) * 100)
# Entropy
clf_entropy = DecisionTreeClassifier(criterion="entropy", random_state=100, max_depth=3, min_samples_leaf=5)
clf_entropy.fit(X_train, y_train)
y_pred = clf_entropy.predict(X_test)
print("Entropy Predicted values:")
print(y_pred)
print("Entropy Accuracy: ", accuracy_score(y_test, y_pred) * 100)
# User Test (DOES NOT WORK)
xx = "present JJ peculiar JJ %% %% written VBN character NN"
x = xx.split("\t")
data = pd.Series(x)
print(x)
print(data)
data = pd.get_dummies(data)
print(data)
user = clf_gini.predict(data)
任何建议或代码帮助都会很棒!
【问题讨论】:
-
尝试使用随机森林,这样每个估计器只考虑一小部分特征
标签: python parsing decision-tree