sklearn之reshape(-1,1)
scikit-learn,又称sklearn,是一个开源的基于python语言的机器学习工具包。它通过NumPy, SciPy和Matplotlib等python数值计算的库实现高效的算法应用,并且涵盖了大多数主流机器学习算法。
sklearn官网链接讲解了所有算法的实现和简单应用:http://scikit-learn.org/stable/index.html
在工程应用中,用python手写代码来从头实现一个算法的可能性非常低,这样不仅耗时耗力,还不一定能够写出构架清晰,稳定性强的模型。更多情况下,是分析采集到的数据,根据数据特征选择适合的算法,在工具包中调用算法,调整算法的参数,获取需要的信息,从而实现算法效率和效果之间的平衡。而sklearn,正是这样一个可以帮助我们高效实现算法应用的工具包。
在用sklearn进行模型预测时发现了几次同样的报错:
ValueError: Expected 2D array, got 1D array instead:
array=XXXXX
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
这是因为在新版sklearn中,所有数据都应该是二维矩阵,哪怕它只是单独一行或一列,需要使用.reshape(1,-1)进行转换,示例如下。
import sklearn.svm as svm
import numpy as np
X = [[0, 0], [1, 1]]
y = [0.5, 1.5]
clf = svm.SVR()
clf.fit(X, y)
result = clf.predict(np.array([0.5, 0.5]).reshape(1, -1))
print result
其实还有更简洁的写法,多加一个[]即可:result = clf.predict([[0.5, 0.5]])
很多时候都是不经意间写成了.predict([X, Y...])造成了报错。