sklearn LinearRegression.Predict() 问题
sklearn LinearRegression.Predict() issue
我正在尝试根据各种其他因素预测呼叫中心的呼叫量。我有一个相当干净的数据集,也相当小,但足够了。我能够训练和测试历史数据并获得分数、摘要等。我一生都无法弄清楚如何使用预测因子数据来预测未来的呼叫。我的数据如下:
Date DayNum factor1 factor2 factor3 factor4 factor5 factor6 factor7 factor8 factor9 VariableToPredict
9/17/2014 1 592 83686.46 0 0 250 15911.8 832 99598.26 177514 72
9/18/2014 2 1044 79030.09 0 0 203 23880.55 1238 102910.64 205064 274
9/19/2014 3 707 84207.27 0 0 180 8143.32 877 92350.59 156360 254
9/20/2014 4 707 97577.78 0 0 194 16688.95 891 114266.73 196526 208
9/21/2014 5 565 83084.57 0 0 153 13097.04 713 96181.61 143678 270
我目前的代码如下:
from sklearn import metrics
from sklearn.preprocessing import StandardScaler
from sklearn.cross_validation import KFold, cross_val_score
from sklearn.linear_model import LinearRegression
import pandas as pd
d = pd.read_csv("H://My Documents//Python Scripts//RawData//Q2917.csv", "r", delimiter=",")
e = pd.read_csv("H://My Documents//Python Scripts//RawData//FY16q2917Test.csv", "r", delimiter=",")
#print(d)
#b = pd.DataFrame.as_matrix(d)
#print(b)
x = d.as_matrix(['factor2', 'factor4', 'factor5', 'factor6'])
y = d.as_matrix(['VariableToPredict'])
x1 = e.as_matrix(['factor2', 'factor4', 'factor5', 'factor6'])
y1 = e.as_matrix(['VariableToPredict'])
#print(len(train))
#print(target)
#use scaler
scalerX = StandardScaler()
train = scalerX.fit_transform(x1)
scalerY = StandardScaler()
target = scalerY.fit_transform(y1)
clf = LinearRegression(fit_intercept=True)
cv = KFold(len(train), 10, shuffle=True, random_state=33)
#decf = LinearRegression.decision_function(train, target)
test = LinearRegression.predict(train, target)
score = cross_val_score(clf,train, target,cv=cv )
print("Score: {}".format(score.mean()))
这当然给了我一个错误,即 y 值中有空值,这是因为它是空白的,我正在尝试预测它。这里的问题是,我对 python 还很陌生,所以我从根本上误解了应该如何构建它。即使它以这种方式工作,它也不正确,它在构建预测未来的模型时没有考虑过去的数据。
我可能需要将它们放在同一个文件中吗?如果是这样,我如何告诉它考虑从 a 行到 b 行的这 3 列,预测相同行的相关列,然后应用该模型分析这三列的未来数据并预测未来的调用。我不希望这里有完整的答案,这是我的工作,但任何小线索将不胜感激。
为了构建回归模型,您需要训练数据和训练分数。这些允许您将一组回归参数拟合到问题中。
然后要进行预测,您需要预测数据,但不需要预测分数,因为您没有这些 - 您正在尝试预测它们!
例如,下面的代码将 运行:
from sklearn.linear_model import LinearRegression
import numpy as np
trainingData = np.array([ [2.3,4.3,2.5], [1.3,5.2,5.2], [3.3,2.9,0.8], [3.1,4.3,4.0] ])
trainingScores = np.array([3.4,7.5,4.5,1.6])
clf = LinearRegression(fit_intercept=True)
clf.fit(trainingData,trainingScores)
predictionData = np.array([ [2.5,2.4,2.7], [2.7,3.2,1.2] ])
clf.predict(predictionData)
您似乎在 predict()
调用中输入了错误数量的参数 - 在这里查看我的代码片段,您应该能够弄清楚如何更改它。
出于兴趣,您可以在之后 运行 以下行访问回归拟合数据的参数:print repr(clf.coef_)
我正在尝试根据各种其他因素预测呼叫中心的呼叫量。我有一个相当干净的数据集,也相当小,但足够了。我能够训练和测试历史数据并获得分数、摘要等。我一生都无法弄清楚如何使用预测因子数据来预测未来的呼叫。我的数据如下:
Date DayNum factor1 factor2 factor3 factor4 factor5 factor6 factor7 factor8 factor9 VariableToPredict
9/17/2014 1 592 83686.46 0 0 250 15911.8 832 99598.26 177514 72
9/18/2014 2 1044 79030.09 0 0 203 23880.55 1238 102910.64 205064 274
9/19/2014 3 707 84207.27 0 0 180 8143.32 877 92350.59 156360 254
9/20/2014 4 707 97577.78 0 0 194 16688.95 891 114266.73 196526 208
9/21/2014 5 565 83084.57 0 0 153 13097.04 713 96181.61 143678 270
我目前的代码如下:
from sklearn import metrics
from sklearn.preprocessing import StandardScaler
from sklearn.cross_validation import KFold, cross_val_score
from sklearn.linear_model import LinearRegression
import pandas as pd
d = pd.read_csv("H://My Documents//Python Scripts//RawData//Q2917.csv", "r", delimiter=",")
e = pd.read_csv("H://My Documents//Python Scripts//RawData//FY16q2917Test.csv", "r", delimiter=",")
#print(d)
#b = pd.DataFrame.as_matrix(d)
#print(b)
x = d.as_matrix(['factor2', 'factor4', 'factor5', 'factor6'])
y = d.as_matrix(['VariableToPredict'])
x1 = e.as_matrix(['factor2', 'factor4', 'factor5', 'factor6'])
y1 = e.as_matrix(['VariableToPredict'])
#print(len(train))
#print(target)
#use scaler
scalerX = StandardScaler()
train = scalerX.fit_transform(x1)
scalerY = StandardScaler()
target = scalerY.fit_transform(y1)
clf = LinearRegression(fit_intercept=True)
cv = KFold(len(train), 10, shuffle=True, random_state=33)
#decf = LinearRegression.decision_function(train, target)
test = LinearRegression.predict(train, target)
score = cross_val_score(clf,train, target,cv=cv )
print("Score: {}".format(score.mean()))
这当然给了我一个错误,即 y 值中有空值,这是因为它是空白的,我正在尝试预测它。这里的问题是,我对 python 还很陌生,所以我从根本上误解了应该如何构建它。即使它以这种方式工作,它也不正确,它在构建预测未来的模型时没有考虑过去的数据。 我可能需要将它们放在同一个文件中吗?如果是这样,我如何告诉它考虑从 a 行到 b 行的这 3 列,预测相同行的相关列,然后应用该模型分析这三列的未来数据并预测未来的调用。我不希望这里有完整的答案,这是我的工作,但任何小线索将不胜感激。
为了构建回归模型,您需要训练数据和训练分数。这些允许您将一组回归参数拟合到问题中。
然后要进行预测,您需要预测数据,但不需要预测分数,因为您没有这些 - 您正在尝试预测它们!
例如,下面的代码将 运行:
from sklearn.linear_model import LinearRegression
import numpy as np
trainingData = np.array([ [2.3,4.3,2.5], [1.3,5.2,5.2], [3.3,2.9,0.8], [3.1,4.3,4.0] ])
trainingScores = np.array([3.4,7.5,4.5,1.6])
clf = LinearRegression(fit_intercept=True)
clf.fit(trainingData,trainingScores)
predictionData = np.array([ [2.5,2.4,2.7], [2.7,3.2,1.2] ])
clf.predict(predictionData)
您似乎在 predict()
调用中输入了错误数量的参数 - 在这里查看我的代码片段,您应该能够弄清楚如何更改它。
出于兴趣,您可以在之后 运行 以下行访问回归拟合数据的参数:print repr(clf.coef_)