以下是我所拥有的样本数据:
标签1(Val: X),标签2(Val: Y),标签3(Val: Z),标签(Val: P)
标签1(Val: A),标签2(Val: B),标签3(Val: C),标签(Val: Q)
标签1(Val: D),标签2(Val: E),标签3(Val: F),标签(Val: R)
标签1(Val: G),标签2(Val: H),标签3(Val: I),标签(Val: S)
我首先将标记放入dataframe并将标签放入单独的dataframe df_label中。然后使用一个HashingVectorizer来准备由ML模型处理的文本(我希望将字符串散列为一个唯一的数值,以便ML模型能够在其上进行训练)
vectorizer = HashingVectorizer()
X_train = vectorizer.transform(df)
y_train = vectorizer.transform(df_label)
clf = RandomForestClassifier(n_jobs=2, random_state=0)
clf.fit(X_train, y_train)当我执行这个时,我得到:ValueError: Unknown label type: 'unknown' on y_train.
我对Python和ML都是新手,我不确定问题是与我的基本逻辑有关,还是一个微不足道的实现问题。感谢你的洞察力和支持。
发布于 2018-06-13 17:15:19
我最近在检查一些事情。想在这里留下一个有用的代码,万一有帮助的话。
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction import FeatureHasher
from sklearn.ensemble import RandomForestClassifier
from sklearn import metrics
import numpy as np
categories = [
'alt.atheism',
'talk.religion.misc',
'comp.graphics',
'sci.space',
]
newsgroups_train = fetch_20newsgroups(subset='train', shuffle=True,
categories=categories, random_state=91)
newsgroups_test = fetch_20newsgroups(subset='test', shuffle=True,
categories=categories, random_state=91)
vectorizer = FeatureHasher(input_type='string')
X_train = vectorizer.fit_transform(newsgroups_train.data)
X_test = vectorizer.fit_transform(newsgroups_test.data)
Y_train = newsgroups_train.target
Y_test = newsgroups_test.target
print(X_train.shape)
print(Y_train.shape)
print(X_test.shape)
print(Y_test.shape)
rf = RandomForestClassifier(n_jobs=-1, n_estimators=100)
rf.fit(X_train, Y_train)
pred = rf.predict(X_test)
score = metrics.accuracy_score(Y_test, pred)
print("accuracy: {:.3f}".format(score))发布于 2018-02-22 06:25:03
虽然很难理解你的数据样本,但我会尝试从你的问题中纠正我所理解的。
每当您使用任何向量器时,请确保首先将fit应用于您的语料库/数据,然后再对其进行转换。
在您的情况下,您可以在X_train上应用transform()而不应用fit。
重要注意事项:您不必在标签上执行HashingVectorizer。更正您的代码:
vectorizer = HashingVectorizer()
X_train = vectorizer.fit_transform(df)
clf = RandomForestClassifier(n_jobs=2, random_state=0)
clf.fit(X_train, df_label)如果使用TfidfVectorizer(),我建议使用HashingVectorizer(),但在此之前,应该对此进行一些研究。
一定要参考sklearn文档,这样它就能帮助您。
希望能帮上忙!
发布于 2018-02-22 20:23:44
从ValueError: Unknown label type: 'unknown' on y_train中,我猜您的y_train中有一些不受支持的/无效的数据类型,或者该类型确实是有效的,但与RandomForestClassifier的期望不匹配。
请做以下工作:
y_train并确保所有值都有意义。HashingVectorizer很有可能无法散列一些特殊情况(如外语字符或缺少值)。type或dtype查找v_train数据类型。确保它与RandomForestClassifier 期望值一致。附注:正如@outlier提到的,我们通常不会转换标签(在您的情况下是y_train)。许多分类器可以将字符串/字母作为类标签处理。如果它们不能,我们可以使用一个简单的映射,如P -> 0、Q -> 1等。
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
encoder.fit(y)
encoded_y = encoder.transform(y)https://datascience.stackexchange.com/questions/28156
复制相似问题