我应该调整哪些超参数来提高准确性?

问题描述 投票:0回答:1

我想知道如何在多标签分类问题中提高准确度分数并降低损失。

如果您查看 sklearn 参考文献,就会发现多类和多输出算法中提到了多标签,我现在正在测试它。 (https://scikit-learn.org/stable/modules/multiclass.html

样本数据使用sklearn.datasets中的make_multilabel_classification有10个特征,并通过修改n_classes创建数据集。

当multilabel中有两个类时,看起来准确率和损失还是有些令人满意的。

from numpy import mean
from numpy import std
from sklearn.datasets import make_multilabel_classification
from sklearn.neighbors import KNeighborsClassifier

from sklearn.metrics import accuracy_score, hamming_loss

# define dataset
X, y = make_multilabel_classification(n_samples=10000, n_features=10, n_classes=2, random_state=1)

# summarize dataset shape
print(X.shape, y.shape)
# summarize first few examples
for i in range(10):
 print(X[i], y[i])

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=101)

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train)
print(scaler.mean_)
print(scaler.var_)

x_train_std = scaler.transform(X_train)
x_test_std = scaler.transform(X_test)

knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(x_train_std, y_train)

pred = knn.predict(x_test_std)

print(accuracy_score(y_test, pred))
print(hamming_loss(y_test, pred))

accuracy_score:0.8345,hamming_loss:0.08875

但是,随着类数超过3,准确率分数逐渐下降,损失增加。

# define dataset
X, y = make_multilabel_classification(n_samples=10000, n_features=10, n_classes=3, random_state=1)

n_classes= 3 --> 准确度得分:0.772,汉明损失:0.116

n_classes= 4 --> 准确度得分:0.4875,汉明损失:0.194125

使用 RandomForestClassifier 算法和 MLPClassifier 算法时也类似,如参考文献所示,或者使用 ClassifierChain(estimator=SVC) 使用不支持 Multilabel 分类的算法时。

我应该调整哪些超参数来提高准确性?

machine-learning scikit-learn multilabel-classification
1个回答
0
投票

在处理包含匿名特征和记录的数据时,建议使用网格搜索通过超参数调整来确定最佳参数。 Sklearn 提供了各种超参数调整系统,其中 GridSearchCV 因其功效而脱颖而出。与随机搜索相比,它通常会在更短的时间内产生更好的结果。然而,这些方法之间的选择最终取决于所使用的特定数据集。

要利用网格搜索,应该以字典格式定义潜在参数,并将它们与模型一起提供给 GridSearchCV

from sklearn.model_selection import GridSearchCV

# define hypertuning parameters
parameters = {'n_neighbors':[3, 5, 10, 15]}

knn = KNeighborsClassifier()
clf = GridSearchCV(knn, parameters)

# Fit the GridSearchCV object to the data
clf.fit(X_train, y_train)

# Get the best parameters
best_params = clf.best_params_

print("Best parameters found:", best_params)

随意为模型添加更多调整参数。有关 GridSearchCV 的更多信息,请参阅页面

© www.soinside.com 2019 - 2024. All rights reserved.