Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.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的交叉验证(Kfold)预测标签_Python_Machine Learning_Scikit Learn_Cross Validation - Fatal编程技术网

Python 如何使用sklearn的交叉验证(Kfold)预测标签

Python 如何使用sklearn的交叉验证(Kfold)预测标签,python,machine-learning,scikit-learn,cross-validation,Python,Machine Learning,Scikit Learn,Cross Validation,我想比较同一个分类器的预测。 作为一个例子,我选择了线性判别分析分类器 因此,我查看了sklearn的文档。 我发现这两个网站: 我想把它们联系在一起:借助交叉验证预测标签(例如Kfold) 但是,我无法使代码正常工作 from sklearn.model_selection import cross_val_predict, KFold from sklearn.model_selection import train_test_split from sklearn.discriminant

我想比较同一个分类器的预测。 作为一个例子,我选择了线性判别分析分类器

因此,我查看了sklearn的文档。 我发现这两个网站:

我想把它们联系在一起:借助交叉验证预测标签(例如Kfold)

但是,我无法使代码正常工作

from sklearn.model_selection import cross_val_predict, KFold
from sklearn.model_selection import train_test_split
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

X = np.array([[1, 2], [2, 4], [3, 2], [4, 4], [5, 2], [6, 4], [7, 2], [8, 4]])
Y = np.array([1, 2, 3, 4, 5, 6, 7, 8])

Xtrain,Xtest,Ytrain,Ytest = train_test_split(X,Y,train_size=0.5,random_state=1)

clf = LinearDiscriminantAnalysis()
clf.fit(Xtrain, Ytrain)
LinearDiscriminantAnalysis(n_components=None, priors=None, shrinkage='auto', solver='lsqr', store_covariance=False, tol=0.001)

# without cross-valdidation
prediction = clf.predict(Xtest)

# with cross-valdidation
cv = KFold(n_splits=2)
prediction_cv = cross_val_predict(clf, X, Y, cv=cv)
希望有人能帮助我

编辑:

我想我需要解释更多。 目前,我有232个数据点(X)。每个点由16个值组成,并指定给特定类别。 我希望在使用交叉验证(如Kfold或漏掉一个)时,可以改进预测(即对看不见的数据点减少分类错误)

使用行
cross\u val\u predict(clf,X,Y,cv=cv)
,Python执行Kfold交叉验证


现在,假设我得到了新的数据点(
xnew
)。如何对它们进行分类?

我想当您运行类似于以下内容的代码时,您会得到一个回溯:

    376         # avoid division by zero in normalization
    377         std[std == 0] = 1.
--> 378         fac = 1. / (n_samples - n_classes)
    379 
    380         # 2) Within variance scaling

ZeroDivisionError: float division by zero
这就是我运行代码时得到的结果。发生这种情况的原因是,每个类有一个数据点,因此
n_samples-n_classes
将等于零

您可以通过填充更多示例或减少类的数量来缓解这一问题:

import numpy as np

from sklearn.model_selection import cross_val_predict, KFold
from sklearn.model_selection import train_test_split
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

X = np.array([[1, 2], [2, 4], [3, 2], [4, 4], [5, 2], [6, 4], [7, 2], [8, 4], [1, 2], [2, 4], [3, 2], [4, 4], [5, 2], [6, 4], [7, 2], [8, 4]])
Y = np.array([1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8])

Xtrain,Xtest,Ytrain,Ytest = train_test_split(X,Y,train_size=0.5,random_state=1)

clf = LinearDiscriminantAnalysis()
clf.fit(X, Y)

# without cross-valdidation
prediction = clf.predict(Xtest)

# with cross-valdidation
cv = KFold(n_splits=2)
prediction_cv = cross_val_predict(clf, X, Y, cv=cv)
如果您有其他问题,请更新您的问题

编辑


对于您更新的问题,它是此问题的副本:

好吧,您到目前为止都是正确的,并且有
预测
预测
。你想如何比较它们?你想做什么,请详细描述。代码直到现在才起作用。我既没有得到
预测
的结果,也没有得到
预测
的结果。Python不喜欢我的代码中的某些东西,我也不知道是什么。背景:只要Python能够计算预测,我就要计算
预测
Ytest
(真正的标签/类)之间的错误。对于您提供的示例数据,请参见下面的答案。感谢您的回答!我现在明白了
zero错误
。代码行
LinearDiscriminantAnalysis(n_components=None,priors=None,restrict='auto',solver='lsqr',store_convariance=False,tol=0.001)是否不相关?
。这一行只是类的打印表示形式。就目前而言,这条线对你没有任何用处。如果这个答案解决了你的问题,如果你能接受它作为答案,那就太好了。