ValueError:X有1个特征,但DecisionTreeClassifier期望输入416809个特征
我正在制作一个简单的程序,输入一个提示后,它会预测与之相关的情感。我有一个数据集,格式是CSV文件,里面有416809条数据,示例如下:
编号 | 文本 | 标签 |
---|---|---|
0 | 我感到非常无助,心情沉重 | 4 |
1 | 我很享受能够懒散地放松和休息,坦白说,在大学结束和博览会的那几周后,我真的需要这样。最近我发现自己有点无精打采,这可不是好事。 | 0 |
(标签是一个从0到5的数字,对应六种情感中的一种)
我的代码如下:
print("Loading modules...")
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.preprocessing import LabelEncoder
print("Loading data...")
data = pd.read_csv('data/emotions.csv') #load dataset to data variable
X = data["text"] #set X value to a table of all specified columns
y = data["label"] #set y value to the column of answers
le = LabelEncoder() #encode labels
le.fit(y)
encoded_y = le.transform(y)
le.fit(X)
encoded_X = le.transform(X)
print("Training model...")
model = DecisionTreeClassifier()
model.fit([encoded_X],[encoded_y]) #train the model
prompt = input("Enter a prompt: ")
encoded_prompt = le.transform([prompt])
predictions = model.predict([encoded_prompt]) #predict
我在最后一行遇到了一个错误:
ValueError: X has 1 features, but DecisionTreeClassifier is expecting 416809 features as input.
我希望predictions
这个变量能是一个数字,或者是一个只包含0到5之间单个数字的列表,并且能打印出代码中的最后一行。
该怎么解决这个问题呢?
1 个回答
1
看看scikit-learn的文档,你会发现要训练你的模型,需要一个形状为(n_samples, n_features)的X。所以我建议把fit的代码改成下一行(把X调整为至少有一个特征):
model.fit(encoded_X.reshape(-1, 1),encoded_y)
另外,LabelEncoder通常用来编码目标值(y),如果你需要对它们进行标准化或者转换非数字标签。因为你的目标值已经是数字,所以可能不需要编码。
此外,使用LabelEncoder处理你的分类特征并不是一个好习惯。如果你照这样写代码,它实际上并不是在分析文本,而是给每个唯一的值分配一个数字标识符。所以,你输入的提示必须是从416809个样本中选择的一个。
如果你想了解使用Scikit-learn进行情感分析的基础知识,我建议你从以下链接开始:
处理文本数据:https://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html
这个链接也很有意思: https://stackabuse.com/python-for-nlp-sentiment-analysis-with-scikit-learn/