kri*_*hna 3 python svm scikit-learn grid-search
我正在尝试学习如何为分类器找到最佳参数。因此,我将GridSearchCV用于多类分类问题。上生成一个虚拟的代码确实不GridSearchCV支持多级的?我只是使用 n_classes=3 的代码。
import numpy as np
from sklearn.datasets import make_classification
from sklearn.preprocessing import StandardScaler,label_binarize
from sklearn.svm import SVC
from sklearn.pipeline import make_pipeline
from sklearn.grid_search import GridSearchCV
from sklearn.metrics import accuracy_score, recall_score, f1_score, roc_auc_score, make_scorer
X, y = make_classification(n_samples=3000, n_features=10, weights=[0.1, 0.9, 0.3],n_classes=3, n_clusters_per_class=1,n_informative=2)
pipe = make_pipeline(StandardScaler(), SVC(kernel='rbf', class_weight='auto'))
param_space = dict(svc__C=np.logspace(-5,0,5), svc__gamma=np.logspace(-2, 2, 10))
f1_score
my_scorer = make_scorer(f1_score, greater_is_better=True)
gscv = GridSearchCV(pipe, param_space, scoring=my_scorer)
Run Code Online (Sandbox Code Playgroud)
我正在尝试按照此处的建议进行One-hot 编码Scikit-learn GridSearch 给出 "ValueError: multiclass format is not supported" error。此外,有时会有像Toxic Comment Classification dataset on Kaggle这样的数据集会给你二值化标签。
y = label_binarize(y, classes=[0, 1, 2])
for i in classes:
gscv.fit(X, y[i])
print gscv.best_params_
Run Code Online (Sandbox Code Playgroud)
我正进入(状态:
ValueError: bad input shape (2000L, 3L)
Run Code Online (Sandbox Code Playgroud)
我不确定为什么会收到此错误。我的目标是为多类分类问题找到最佳参数。
你的代码的两部分有两个问题。
1)让我们从第一部分开始,当您还没有对标签进行单热编码时。你看,SVC支持多类情况就好了。但是f1_score当与 (inside) 结合时GridSearchCV则不然。
f1_score 默认情况下,在二进制分类的情况下返回正标签的分数,因此在您的情况下会抛出错误。
OR它也可以返回一组分数(每个类一个),但 GridSearchCV 只接受一个值作为分数,因为它需要它来找到最佳分数和超参数的最佳组合。因此,您需要传入平均方法f1_score以从数组中获取单个值。
根据f1_score文档,允许使用以下平均方法:
平均值:字符串,[无,'二进制'(默认),'微','宏','样本','加权']
所以像这样改变你的 make_scorer :
my_scorer = make_scorer(f1_score, greater_is_better=True, average='micro')
Run Code Online (Sandbox Code Playgroud)
根据您的需要更改'average'上面的参数。
2)现在进入第二部分:当您对标签进行单热编码时, 的形状y变为二维,但SVC仅支持y文档中指定的一维数组:
Run Code Online (Sandbox Code Playgroud)fit(X, y, sample_weight=None)[source] X : {array-like, sparse matrix}, shape (n_samples, n_features) y : array-like, shape (n_samples,)
但即使您对标签进行编码并使用支持二维标签的分类器,也必须解决第一个错误。因此,我建议您不要对标签进行一次性编码,而只需更改f1_score.
| 归档时间: |
|
| 查看次数: |
2332 次 |
| 最近记录: |