第一次折叠的低K倍精度

时间:2018-02-27 18:22:25

标签: python scikit-learn

我创建了一个文本分类器,我正在尝试使用K-fold交叉验证。我无法弄清楚为什么我的第一个折叠具有55%的准确度,而我的其他折叠过度拟合的准确度为99-100%。我的数据集是5109x2数据框,其中df [“Features”]列为特征,df [“Labels”]为标签。 df [“Features”]具有基于某些产品映射关键字的描述符,并以逗号分隔,如下所示:Features。我正在通过countvectorizer()创建基于子功能的指标变量。这是一个5倍的简历的结果。 Result

import pandas as pd
import numpy as np
from sklearn.model_selection import KFold
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.neural_network import MLPClassifier

def train(classifier, X, y):
count_vect=CountVectorizer(min_df = 1,lowercase = False)
y=pd.Series(y)
X=count_vect.fit_transform(X)
y=count_vect.fit_transform(y)
kf=KFold(n_splits=5,shuffle=True)
k_fold=pd.Series(np.zeros(5))
for i,(train_index,test_index) in enumerate(kf.split(X)):
    print("Train",train_index, "Test",test_index)
    X_train,X_test=X[train_index],X[test_index]
    y_train,y_test=y[train_index],y[test_index]
    k_fold[i]=(print("For K=",i+1," Classifier accuracy= ",classifier.fit(X_train, y_train).score(X_test, y_test), "n = ",X_train.shape[0]))

train(MLPClassifier(hidden_layer_sizes=  (100,),activation='relu',random_state=2, max_iter=100, warm_start=True),df["Features"], df["Labels"])

1 个答案:

答案 0 :(得分:0)

这完全有可能仅仅是数据的结果。没有理由手动实现这一点,scikit-learn内置了functionality。如果您想测试实现,请尝试使用shuffle参数关闭运行实验,看看是否得到了相同的结果。

最佳做法是在运行交叉验证之前对数据进行随机播放。