我找到了一个使用python scikit-learn线性回归预测下一个值的代码。
我能够预测单个数据..但实际上我需要预测6个值并打印六个值的预测。
这是代码
def linear_model_main(x_parameters, y_parameters, predict_value):
# Create linear regression object
regr = linear_model.LinearRegression()<
regr.fit(x_parameters, y_parameters)
# noinspection PyArgumentList
predict_outcome = regr.predict(predict_value)
score = regr.score(X, Y)
predictions = {'intercept': regr.intercept_, 'coefficient': regr.coef_, 'predicted_value': predict_outcome, 'accuracy' : score}
return predictions
predicted_value = 9 #I NEED TO PREDICT 9,10,11,12,13,14,15
result = linear_model_main(X, Y, predicted_value)
print('Constant Value: {0}'.format(result['intercept']))
print('Coefficient: {0}'.format(result['coefficient']))
print('Predicted Value: {0}'.format(result['predicted_value']))
print('Accuracy: {0}'.format(result['accuracy']))
我试过这样做:
predicted_value = {9,10,11,12,13,14,15}
result = linear_model_main(X, Y, predicted_value)
print('Constant Value: '.format(result['intercept']))
print('Coefficient: '.format(result['coefficient']))
print('Predicted Value: '.format(result['predicted_value']))
print('Accuracy: '.format(result['accuracy']))
错误信息是:
Traceback (most recent call last):
File "C:Python34\data\cp.py", line 28, in <module>
result = linear_model_main(X, Y, predicted_value)
File "C:Python34\data\cp.py", line 22, in linear_model_main
predict_outcome = regr.predict(predict_value)
File "C:\Python34\lib\site-packages\sklearn\linear_model\base.py", line 200, in predict return self._decision_function(X)
File "C:\Python34\lib\site-packages\sklearn\linear_model\base.py", line 183, in _decision_function
X = check_array(X, accept_sparse=['csr', 'csc', 'coo'])
File "C:\Python34\lib\site-packages\sklearn\utils\validation.py", line 393, in check_array array = array.astype(np.float64)
TypeError: float() argument must be a string or a number, not 'set'
C:\>
和
predicted_value = 9,10,11,12,13,14,15
result = linear_model_main(X, Y, predicted_value)
print('Constant Value: '.format(result['intercept']))
print('Coefficient: '.format(result['coefficient']))
print('Predicted Value: '.format(result['predicted_value']))
print('Accuracy: '.format(result['accuracy']))
得到了这些错误
C:\Python34\lib\site-packages\sklearn\utils\validation.py:386: DeprecationWarnin
g: Passing 1d arrays as data is deprecated in 0.17 and willraise ValueError in 0
.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.
DeprecationWarning)
Traceback (most recent call last):
File "C:Python34\data\cp.py", line 28, in <module>
result = linear_model_main(X, Y, predicted_value)
File "C:Python34\data\cp.py", line 22, in linear_model_main
predict_outcome = regr.predict(predict_value)
File "C:\Python34\lib\site-packages\sklearn\linear_model\base.py", line 200, in predict return self._decision_function(X)
File "C:\Python34\lib\site-packages\sklearn\linear_model\base.py", line 185, in _decision_function dense_output=True) + self.intercept_
File "C:\Python34\lib\site-packages\sklearn\utils\extmath.py", line 184, in safe_sparse_dot return fast_dot(a, b)
ValueError: shapes (1,3) and (1,1) not aligned: 3 (dim 1) != 1 (dim 0)
C:\>
如果我做这样的改动:
predicted_value = 9
result = linear_model_main(X, Y, predicted_value)
print('Constant Value: {1}'.format(result['intercept']))
print('Coefficient: {1}'.format(result['coefficient']))
print('Predicted Value: {}'.format(result['predicted_value']))
print('Accuracy: {1}'.format(result['accuracy']))
它会再次给我一个错误,说它超过限制。必须做什么?
答案 0 :(得分:1)
这是一个工作示例。我没有构建你的函数,只是向你展示了正确的语法。看起来您没有正确地将数据传递到fit
。
import numpy as np
from sklearn import linear_model
x = np.random.uniform(-2,2,101)
y = 2*x+1 + np.random.normal(0,1, len(x))
#Note that x and y must be in specific shape.
x = x.reshape(-1,1)
y = y.reshape(-1,1)
LM = linear_model.LinearRegression().fit(x,y) #Note I am passing in x and y in column shape
predict_me = np.array([ 9,10,11,12,13,14,15])
predict_me = predict_me.reshape(-1,1)
score = LM.score(x,y)
predicted_values = LM.predict(predict_me)
predictions = {'intercept': LM.intercept_, 'coefficient': LM.coef_, 'predicted_value': predicted_values, 'accuracy' : score}
答案 1 :(得分:0)
Regr.predict()期望一个与X形状相同的集合。(read the docs) 而不是这个,你证明了一个标量值(9)。这就是为什么你得到关于不匹配的对象的形状的错误。
您需要使用具有相同数量的&#34;列&#34;的对象进行预测。作为X(尽管不一定是相同的行数),您将获得每行的预测。
您的predict_value变量似乎没有做任何有用的事情,因为Y应该包含您尝试为X的每一行预测的标签。