【发布时间】:2017-05-30 02:31:27
【问题描述】:
在 SVM 上搜索一些教程时,我在网上找到了 - Support Vector Machine _ Illustration - 下面的代码,但是它产生了一个 weird 图表。调试完代码,不知道是不是在Date列表上,准确的说:
dates.append(int(row[0].split('-')[0]))
从我这边来看是静态的(即 2016 年)或者如果还有其他情况,尽管我在代码中没有看到任何异常。
编辑
这个推论来自语法:
plt.scatter(dates, prices, color ='black', label ='Data');
plt.show()
事实上,屈服于垂直线,而
dates.append(int(row[0].split('-')[0]))
假设,如链接中所述,也反映在代码中,将每个日期 YYYY-MM-DD 转换为不同的整数值
编辑(2)
用dates.append(md.datestr2num(row[0]))代替
函数get_data(filename)中的dates.append(int(row[0].split('-')[0]))确实有帮助!
import csv
import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt
dates = []
prices = []
def get_data(filename):
with open(filename, 'r') as csvfile:
csvFileReader = csv.reader(csvfile)
next(csvFileReader)
for row in csvFileReader:
dates.append(int(row[0].split('-')[0]))
prices.append(float(row[6])) # from 1 i.e from Opening to closing price
return
def predict_prices(dates,prices,x):
dates = np.reshape(dates,(len(dates),1))
svr_lin = SVR(kernel = 'linear', C = 1e3)
svr_poly = SVR(kernel = 'poly', C = 1e3, degree = 2)
svr_rbf = SVR(kernel = 'rbf', C = 1e3, gamma = 0.1)
svr_lin.fit(dates,prices)
svr_poly.fit(dates,prices)
svr_rbf.fit(dates,prices)
plt.scatter(dates, prices, color ='black', label ='Data')
plt.plot(dates, svr_rbf.predict(dates), color ='red', label = 'RBF model')
plt.plot(dates, svr_rbf.predict(dates), color ='green', label = 'Linear model')
plt.plot(dates, svr_rbf.predict(dates), color ='blue', label = 'Polynomial model')
plt.xlabel('Date')
plt.ylabel('Price')
plt.title('Support Vector Regression')
plt.legend
plt.show()
return svr_rbf.predict(x)[0], svr_lin.predict(x)[0], svr_poly.predict(x)[0]
get_data('C:/local/ACA.csv')
predict_prices(dates, prices, 29)
提前致谢
【问题讨论】:
-
还有什么奇怪的?您正在尝试从...预测 2016 年的某个数字(价格),因此无能为力。这样的数据根本没有意义。
-
weird是什么,您有 3 个不同的模型试图预测过去30天的价格,其中一个模型以一条垂直线结束。 -
@lejlot:
plt.scatter(dates, prices, color ='black', label ='Data'); plt.show()实际上产生了垂直线。正如帖子中提到的,这件事似乎来自dates.append(int(row[0].split('-')[0]))。实际上,每个日期YYYY-MM-DD被转换为静态年份YYYY,而不是每个不同日期的不同integer值的事实可能是原因。我不知何故缺少的是为什么从语法.split('-')中删除“-”似乎不起作用。 -
将额外信息添加到您的问题中。在评论格式中很难阅读。
-
@hpaulj:我已经相应地编辑了帖子。如前所述,在我看来问题出在
.split('-')函数上。为了说明我的观点,csv 中的所有日期(例如 2016-12-28、...2016-12-30)都转换为 2016。
标签: python numpy matplotlib machine-learning svm