如何解决SVM 交叉验证中每个标签的准确性?
我有以下 df
text count daytime label
I think... 4 morning pos
You should... 3 afternoon neg
Better... 7 evening neu
我尝试使用 ColumnTransform 仅预处理 text
列
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.compose import ColumnTransformer
transformer = ColumnTransformer([
('vectorizer',TfidfVectorizer(ngram_range=(1,1)),'text')
],remainder='passthrough')
然后我使用以下代码分别应用 count
和 daytime
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import OneHotEncoder
transformer = ColumnTransformer([
('vectorizer','text'),('scaler',StandardScaler(),['count']),('enc',OneHotEncoder(),['daytime'])
],remainder='passthrough')
X_transformed = transformer.fit_transform(X)
之后,我使用 shufflesplit 对其进行交叉验证并使用 SVM 对其进行训练
from sklearn.svm import SVC
from sklearn.model_selection import ShuffleSplit
model = SVC(kernel='linear')
cv = ShuffleSplit(n_splits=10,test_size=0.2,random_state=69)
之后,我使用 cross_val_score 应用 mdel
scores = cross_val_score(model,X_vec,y,cv=cv,scoring='accuracy')
输出是每次迭代的准确性
[0.33150734 0.08022311 0.03531764]
喜欢这个输出示例
precision recall f1-score support
pos 1.00 0.48 0.65 702
neg 0.78 1.00 0.88 1276
neu 0.78 1.00 0.88 1276
accuracy 0.82 1978
macro avg 0.89 0.74 0.76 1978
weighted avg 0.86 0.82 0.80 1978
我试过了
print(classification_report(y,scores))
按照建议。但它给出了像
这样的错误Found input variables with inconsistent numbers of samples: [10761,10]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。