多类分类的满分?
Perfect scores in multiclassclassification?
我正在研究 multiclass classification 问题,其中 3 (1, 2, 3) classes 是完美分布的。 (每个 class 的 70 个实例导致 (210, 8) 数据帧)。
现在我的数据按顺序分布了所有 3 个 classes,即前 70 个实例是 class1,接下来的 70 个实例是 class2,最后 70 个实例是 class 3. 我知道这种分布会导致在训练集上得分高但在测试集上得分低,因为测试集有 classes 模型没有看到。所以我在train_test_split
中使用了stratify
参数。下面是我的代码:-
# SPLITTING
train_x, test_x, train_y, test_y = train_test_split(data2, y, test_size = 0.2, random_state =
69, stratify = y)
cross_val_model = cross_val_score(pipe, train_x, train_y, cv = 5,
n_jobs = -1, scoring = 'f1_macro')
s_score = cross_val_model.mean()
def objective(trial):
model__n_neighbors = trial.suggest_int('model__n_neighbors', 1, 20)
model__metric = trial.suggest_categorical('model__metric', ['euclidean', 'manhattan',
'minkowski'])
model__weights = trial.suggest_categorical('model__weights', ['uniform', 'distance'])
params = {'model__n_neighbors' : model__n_neighbors,
'model__metric' : model__metric,
'model__weights' : model__weights}
pipe.set_params(**params)
return np.mean( cross_val_score(pipe, train_x, train_y, cv = 5,
n_jobs = -1, scoring = 'f1_macro'))
knn_study = optuna.create_study(direction = 'maximize')
knn_study.optimize(objective, n_trials = 10)
knn_study.best_params
optuna_gave_score = knn_study.best_value
pipe.set_params(**knn_study.best_params)
pipe.fit(train_x, train_y)
pred = pipe.predict(test_x)
c_matrix = confusion_matrix(test_y, pred)
c_report = classification_report(test_y, pred)
现在的问题是我在所有方面都获得了满分。执行 cv 的 f1 宏观分数为 0.898。下面是我的混淆矩阵和 class化验报告:-
14 0 0
0 14 0
0 0 14
分类报告:-
precision recall f1-score support
1 1.00 1.00 1.00 14
2 1.00 1.00 1.00 14
3 1.00 1.00 1.00 14
accuracy 1.00 42
macro avg 1.00 1.00 1.00 42
weighted avg 1.00 1.00 1.00 42
我是过拟合了还是什么?
终于找到答案了。我使用的数据集是问题所在。该数据集是为 knn 算法量身定制的,这就是为什么我使用相同的算法获得满分的原因。
我在对这个数据集进行聚类练习并且 K-Means 算法完美地预测了聚类后得出了这个结论。
我正在研究 multiclass classification 问题,其中 3 (1, 2, 3) classes 是完美分布的。 (每个 class 的 70 个实例导致 (210, 8) 数据帧)。
现在我的数据按顺序分布了所有 3 个 classes,即前 70 个实例是 class1,接下来的 70 个实例是 class2,最后 70 个实例是 class 3. 我知道这种分布会导致在训练集上得分高但在测试集上得分低,因为测试集有 classes 模型没有看到。所以我在train_test_split
中使用了stratify
参数。下面是我的代码:-
# SPLITTING
train_x, test_x, train_y, test_y = train_test_split(data2, y, test_size = 0.2, random_state =
69, stratify = y)
cross_val_model = cross_val_score(pipe, train_x, train_y, cv = 5,
n_jobs = -1, scoring = 'f1_macro')
s_score = cross_val_model.mean()
def objective(trial):
model__n_neighbors = trial.suggest_int('model__n_neighbors', 1, 20)
model__metric = trial.suggest_categorical('model__metric', ['euclidean', 'manhattan',
'minkowski'])
model__weights = trial.suggest_categorical('model__weights', ['uniform', 'distance'])
params = {'model__n_neighbors' : model__n_neighbors,
'model__metric' : model__metric,
'model__weights' : model__weights}
pipe.set_params(**params)
return np.mean( cross_val_score(pipe, train_x, train_y, cv = 5,
n_jobs = -1, scoring = 'f1_macro'))
knn_study = optuna.create_study(direction = 'maximize')
knn_study.optimize(objective, n_trials = 10)
knn_study.best_params
optuna_gave_score = knn_study.best_value
pipe.set_params(**knn_study.best_params)
pipe.fit(train_x, train_y)
pred = pipe.predict(test_x)
c_matrix = confusion_matrix(test_y, pred)
c_report = classification_report(test_y, pred)
现在的问题是我在所有方面都获得了满分。执行 cv 的 f1 宏观分数为 0.898。下面是我的混淆矩阵和 class化验报告:-
14 0 0
0 14 0
0 0 14
分类报告:-
precision recall f1-score support
1 1.00 1.00 1.00 14
2 1.00 1.00 1.00 14
3 1.00 1.00 1.00 14
accuracy 1.00 42
macro avg 1.00 1.00 1.00 42
weighted avg 1.00 1.00 1.00 42
我是过拟合了还是什么?
终于找到答案了。我使用的数据集是问题所在。该数据集是为 knn 算法量身定制的,这就是为什么我使用相同的算法获得满分的原因。
我在对这个数据集进行聚类练习并且 K-Means 算法完美地预测了聚类后得出了这个结论。