支持向量机Python 3.5.2

支持向量机Python 3.5.2,python,numpy,matplotlib,machine-learning,svm,Python,Numpy,Matplotlib,Machine Learning,Svm,在搜索一些关于SVM的教程时,我在网上找到了以下代码,但是它产生了一个奇怪的图表。调试完代码后,我想知道原因是否在日期列表中,确切地说: dates.append(int(row[0].split('-')[0])) 从我的角度来看,这是静态的(即2016年),或者如果有其他情况,尽管我没有看到代码中有任何异常 编辑 此推论来自以下语法: plt.scatter(dates, prices, color ='black', label ='Data'); plt.show() 屈服于垂直线

在搜索一些关于
SVM
的教程时,我在网上找到了以下代码,但是它产生了一个
奇怪的
图表。调试完代码后,我想知道原因是否在
日期
列表中,确切地说:

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(第[0]行))

dates.append(int(行[0].split('-')[0]))
在函数
get_data(文件名)
中有帮助


提前感谢

获取数据
创建两个列表,
日期
价格

np.array(日期)
np.array(价格)
产生了什么?形状和数据类型?由于您的绘图只显示一个日期,我们需要查看该数组的值范围

我编辑了您的问题,试图使函数定义正确。确保我做对了

csv
中的日期列是什么样子的

看起来您的
日期
解析执行以下操作:

In [25]: txt = '2016-02-20'

In [26]: txt.split('-')
Out[26]: ['2016', '02', '20']

In [27]: int(txt.split('-')[0])
Out[27]: 2016
所以你只是在抢夺这一年。这就解释了垂直散点图

In [29]: 0.010+2.01599e3
Out[29]: 2016.0
我认为这将是一个更好的日期转换-转换为
np.datetime64
dtype

In [28]: np.array([txt], dtype='datetime64[D]')
Out[28]: array(['2016-02-20'], dtype='datetime64[D]')

我一直在使用大量示例(Siraj、Chaitjo、Jaihad和其他)中的SVM代码,发现日期需要采用DD-MM-YYYY格式…因此使用的数据是日期…而不是年日期(如dark.vapor所述)

数据只能保存30天……如本代码段所示:

预测价格(日期、价格、29)

否则,使用具有多个月的数据文件(具有重复的天数…例如1月15日和2月15日)…我可以在每天绘制多个价格,而不是每天只绘制一天的价格

Edit2:我尝试改变数据集,发现数据行可以超过29…只要日期只是一个整数序列。我走了85天(行)…他们都在策划。所以我有点困惑,在上面的预测代码中“29”是做什么的

如果能够在几个月内使用更大的数据文件,并选择我想要测试的日期范围,那将是一件很好的事情……但现在这超出了我的编码技能

我只是一个新手编码器,所以我希望这是准确的,因为这似乎对我使用DD-MM-YYYY格式工作很好,给了我一个很好的清晰的情节

希望这有帮助, 罗伯特

编辑:我刚刚找到一篇描述此代码的好文章…它确认了使用DD-MM-YYYY格式的“day”解析

dates.append(int(第[0]行)。拆分('-')[0]))
“获取一个月中的日期,该日期位于索引零处,因为日期的格式为[date]-[month]-[year]。”

有什么奇怪的?你正试图从…中预测一些数字(价格)。。。一个数字2016,所以什么也做不了。这样的数据根本没有意义。
奇怪的是,在过去的
30天里,你有3种不同的模型试图预测价格,其中一种以垂直线结束。@lejlot:
plt.scatter(日期、价格、颜色='黑色',标签='数据');plt.show()
实际产生垂直线。正如在文章中提到的,这件事可能来自
dates.append(int(行[0].split('-')[0])
。事实上,每个单独的日期
YYYY-MM-DD
转换为静态年份
yyy,
,而不是每个不同日期的不同
整型值可能是原因。不知何故,我缺少的是为什么从语法
.split('-')
中删除'-'似乎不起作用。请将这些额外信息添加到您的问题中。用评论格式很难读出来。@hpaulj:我已经相应地编辑了这篇文章。如前所述,在我看来问题来自
.split('-')
函数。为了说明我的观点,csv中的所有日期(如2016-12-28,…2016-12-30)都转换为2016年。感谢您确认我的想法。因此,我将更新
获取数据(文件名)
In [28]: np.array([txt], dtype='datetime64[D]')
Out[28]: array(['2016-02-20'], dtype='datetime64[D]')