Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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 用于查找奇偶数的机器学习获得两个不同分类器的不正确/正确输出_Python_Machine Learning_Statistics_Classification_Scikit Learn - Fatal编程技术网

Python 用于查找奇偶数的机器学习获得两个不同分类器的不正确/正确输出

Python 用于查找奇偶数的机器学习获得两个不同分类器的不正确/正确输出,python,machine-learning,statistics,classification,scikit-learn,Python,Machine Learning,Statistics,Classification,Scikit Learn,我在一个假设问题上尝试了一种机器学习算法:- 我使用以下python代码创建了一个伪特征向量和一个伪结果数据集:- x=[] y=[] for i in range(0,100000): mylist=[] mylist.append(i) mylist.append(i) x.append(mylist) if(i%2)==0: y.append(0) else: y.append(1) 上面的代码给了我两个py

我在一个假设问题上尝试了一种机器学习算法:-

我使用以下python代码创建了一个伪特征向量和一个伪结果数据集:-

x=[]
y=[]
for i in range(0,100000):
    mylist=[]
    mylist.append(i)
    mylist.append(i)
    x.append(mylist)
    if(i%2)==0:
        y.append(0)
    else:
        y.append(1)
上面的代码给了我两个python列表,即, x=[[0,0]、[1,1]、[2,2]……等等]#此列表包含伪特征向量,具有两个相同的数字

y=[0,1,0…等等]#这有假测试标签,0表示偶数,1表示奇数

我认为测试数据足以让ML算法学习。我使用下面的python代码来训练两种不同的机器学习模型

方法1:高斯朴素贝叶斯

from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
gnb.fit(x,y)
x_pred = [[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16]]
y_pred=gnb.predict(x_pred)
print y_pred
我得到以下不正确的输出,分类器无法预测:-

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0]
方法2:支持向量机

from sklearn import svm
clf = svm.SVC()
clf.fit(x, y)
x_pred = [[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9],[10,10],[11,11],[12,12],[13,13],[14,14],[15,15],[16,16]]
y_pred=clf.predict(x_pred)
print y_pred
我得到以下正确输出,分类器无法预测:-

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0]
有人能解释一下为什么一种方法有50%的准确率而另一种方法有100%的准确率吗


让我知道这个问题是否标记了错误的类别。

Naive Bayes是一个参数化模型:它试图将您的训练集总结为九个参数,前一个类(其中任何一个类为50%)以及每个类、每个特征的均值和方差。但是,您的目标值
y
在任何方面都不是输入
x
的均值和方差的函数,(*),因此参数是不相关的,模型采用有效的随机猜测

相反,支持向量机记住其训练集,并使用核函数将新输入与训练输入进行比较。它应该选择训练样本的一个子集,但对于这个问题,它必须记住所有样本:

>>> x = np.vstack([np.arange(100), np.arange(100)]).T
>>> y = x[:, 0] % 2
>>> from sklearn import svm
>>> clf = svm.SVC()
>>> clf.fit(x, y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,
  kernel='rbf', max_iter=-1, probability=False, random_state=None,
  shrinking=True, tol=0.001, verbose=False)
>>> clf.support_vectors_.shape
(100, 2)
由于您使用的是在训练集中出现的测试样本,所以它所要做的就是查找您在训练集中呈现的样本的标签并返回这些标签,这样您就可以获得100%的准确性。如果在训练集之外输入SVM样本,您将看到它也开始随机猜测:

>>> clf.predict(x * 2)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1])
因为乘以2会使所有的特征都相等,所以真正的标签应该都是零,准确率是50%:一个随机猜测的准确率


(*)实际上,训练集中存在一些依赖性,但随着数据量的增加,这种依赖性会下降。

我有一个天真的问题,那么在我们需要预测一个数字是偶数还是奇数的问题中,可以使用多少数据和什么分类器?或者这完全不是一个机器学习问题?让我们说,没有办法找到奇偶数,即所有类型的mod运算符都消失了,没有其他办法。那么我们该如何处理这个问题呢。我可能听起来很疯狂,但这只是一个随机的想法。@divyenduz您可以使用
k%2
来确定
k
是否为偶数,所以不,我不会使用机器学习来解决这个问题。你可以设计一些功能,让几乎所有的分类学习者都能学到这一点,但这些功能要么是琐碎的,要么是人为的。也许有人会想出一些办法。再次感谢。很抱歉,之前忘记将其标记为已完成。今天完成,谢谢。统计中的类似问题: