Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何正确使用sklearn';是否使用一个热编码类进行交叉验证?_Python_Scikit Learn_Cross Validation_One Hot Encoding - Fatal编程技术网

Python 如何正确使用sklearn';是否使用一个热编码类进行交叉验证?

Python 如何正确使用sklearn';是否使用一个热编码类进行交叉验证?,python,scikit-learn,cross-validation,one-hot-encoding,Python,Scikit Learn,Cross Validation,One Hot Encoding,我创建了一个模型来对我的8类数据集进行分类,并使用MLP从中获得一些分数。为此,我决定使用sklearn.metrics.cross_验证,使用10倍 以下代码可以正常工作: from sklearn.neural_network import MLPClassifier from sklearn.model_selection import cross_validate from sklearn.metrics import accuracy_score, make_scorer, f1_sc

我创建了一个模型来对我的8类数据集进行分类,并使用MLP从中获得一些分数。为此,我决定使用sklearn.metrics.cross_验证,使用10倍

以下代码可以正常工作:

from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import cross_validate
from sklearn.metrics import accuracy_score, make_scorer, f1_score
import pandas as pd

def MLPClasify(sample):
    df = pd.read_csv('my_path\\my_file.csv', header=None)
    y = df[NumberOfFeatures]
    x = df.drop([NumberOfFeatures], axis=1)
    clf = MLPClassifier(hidden_layer_sizes=(27), activation='logistic', max_iter=500, alpha=0.0001, 
                        solver='adam', verbose=10, random_state=21, tol=0.000000001)
    clf.out_activation_ = 'softmax'
    scoring = {'Accuracy': make_scorer(accuracy_score), 'F1': make_scorer(f1_score, 
               average='weighted')}
    scores = cross_validate(clf, x, y, cv=10, scoring=scoring)
    return scores
一切正常,我得到了大约60%的准确度。所以我决定使用一种热编码,看看是否能得到更好的结果。因此,我编写了以下代码:

from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import cross_validate
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.metrics import accuracy_score, make_scorer, f1_score
import pandas as pd

def MLPClasify(sample):
    df = pd.read_csv('my_path\\my_file.csv', header=None)
    y = df[NumberOfFeatures]
    x = df.drop([NumberOfFeatures], axis=1)
    label_encoder = LabelEncoder()
    integer_encoded = label_encoder.fit_transform(y)
    onehot_encoder = OneHotEncoder()
    integer_encoded = integer_encoded.reshape(len(integer_encoded), 1)
    onehot_encoded = onehot_encoder.fit_transform(integer_encoded)
    y = onehot_encoded
    clf = MLPClassifier(hidden_layer_sizes=(27), activation='logistic', max_iter=500, alpha=0.0001, 
                        solver='adam', verbose=10, random_state=21, tol=0.000000001)
    clf.out_activation_ = 'softmax'
    scoring = {'Accuracy': make_scorer(accuracy_score), 'F1': make_scorer(f1_score, 
               average='weighted')}
    scores = cross_validate(clf, x, y, cv=10, scoring=scoring)
    return scores
代码运行,但我得到以下警告:

UndefinedMetricWarning:F分数定义不清,在没有真实或预测样本的标签中设置为0.0。使用
zero\u division
参数 控制这种行为。 平均值,“真实或预测”,“F分数为”,len(真实和)

而且,我的准确率下降到2%以下

你知道我做错了什么吗


谢谢你的帮助,我不认为在那种情况下我会考虑使用OHE。但是,我们可以使用更多有关您正在处理的
y
数据类型的信息?是否将值作为整数或类别传递?应用一个热编码之前的y值是类别('A01'、'A02'…'A08')。我实际上选择了一个热编码,因为我不能获得AUC分数与类别作为标签LabelSI不认为我会考虑使用OHE在这种情况下。但是,我们可以使用更多有关您正在处理的
y
数据类型的信息?是否将值作为整数或类别传递?应用一个热编码之前的y值是类别('A01'、'A02'…'A08')。实际上,我选择了一种热编码,因为我无法获得类别作为类标签的AUC分数