【发布时间】:2021-08-21 14:21:09
【问题描述】:
我第一次尝试制作multi class classification,我第一次使用scikit-learn,我在网上找到this code 并尝试将其用于我的数据
我的数据看起来像这样
id Text Tags
----------------------------------------------------------------------------
1 Tears made her vision blur again blue
2 She looked away, outside, at the blur of snow as he continued. blue
3 Mr. Green, you are wanted on the phone green
4 I prefer oranges to apples orange
5 Tom drank his orange juice black
这是我的代码
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer, TfidfTransformer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.naive_bayes import MultinomialNB
from sklearn.svm import LinearSVC
df = pd.read_csv('./dataSet03.csv')
col = ['Text', 'Tags']
data = df[col]
data.columns =['Text', 'Tags']
df['id'] = df['Tags'].factorize()[0]
product_id_data = df[['Tags', 'id']].drop_duplicates().sort_values('id')
product_to_id = dict(product_id_data.values)
id_to_product = dict(product_id_data[['id', 'Tags']].values)
tfidf = TfidfVectorizer(sublinear_tf=True,
min_df=5,
norm='l2',
encoding='latin-1',
ngram_range=(1, 2),
stop_words='english')
features = tfidf.fit_transform(df.Text).toarray()
labels = df.id
X_train, X_test, y_train, y_test = train_test_split(df.Text, df.Tags, random_state=0)
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(X_train)
tfidf_transformer = TfidfTransformer()
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)
clf = MultinomialNB().fit(X_train_tfidf, y_train)
models = [
RandomForestClassifier(n_estimators=200, max_depth=3, random_state=0),
LinearSVC(),#Linear Support Vector Classification.
MultinomialNB(),#Naive Bayes classifier for multinomial models
LogisticRegression(random_state=0),
]
CV = 10
cv_df = pd.DataFrame(index=range(CV * len(models)))
entries = []
for model in models:
model_name = model.__class__.__name__
accuracies = cross_val_score(model, features, labels, scoring='accuracy', cv=CV)
for fold_idx, accuracy in enumerate(accuracies):
entries.append((model_name, fold_idx, accuracy))
cv_df = pd.DataFrame(entries, columns=['model_name', 'fold_idx', 'accuracy'])
print(cv_df.groupby('model_name').accuracy.mean())
我的代码到达此行时出现此错误
accuracies = cross_val_score(model, features, labels, scoring='accuracy', cv=CV)
这是错误
ValueError: n_splits=10 cannot be greater than the number of members in each class.
【问题讨论】:
-
逻辑回归,默认情况下,仅限于二分类问题。尝试将其移除并仅使用剩余的 3 个模型。
标签: python scikit-learn nlp