机器学习简易入门(一) - 线性回归

摘要:本文简单叙述了如何根据标准普尔500指数使用线性回归来预测股票的走势

声明:(本文的内容非原创,但经过本人翻译和总结而来,转载请注明出处)

本文内容来源:https://www.dataquest.io/mission/58/regression-basics

标准普尔500(S&P 500)说明:http://www.investopedia.com/ask/answers/05/sp500calculation.asp

 

原始数据展现(使用了2005年至2015年的数据)

import pandas

sp500 = pandas.read_csv("sp500.csv")

注意到上面的数据中有一些行(如第六行)的value值为点号(.),这是因为这个日期在美国是一个假日,所以没有股票交易信息,现在要过滤掉这些行

sp500 = sp500[sp500[‘value‘] != ‘.‘]

 

格式化数据

为了更容易地使用机器学习的算法,需要把用来预测的值和预测后的真实值放在同一行,在这个例子中,我们要根据每一天的股票指数来预测下一个交易日的股票指数,所以要在每一行上增加下一天指数的列,我们需要的是这样格式的数据

next_day = sp500["value"].iloc[1:]
sp500 = sp500.iloc[:-1,:] # 去掉最后一行
sp500["next_day"] = next_day.values

在导入文件的时候,Pandas会自动为每一列的数据推断数据格式,但由于在导入原始的文件时有一些行(如第六行)的value值为点号(.),所以pandas把该列认为是字符类型,而不是float类型,需要将该列转换数据格式

# 原始的数据格式

print(sp500.dtypes)

sp500[‘value‘] = sp500[‘value‘].astype(float)

sp500[‘next_day‘] = sp500[‘next_day‘].astype(float)

# 转换后的数据格式

print(sp500.dtypes)

 

建立模型

使用sckit-learn包中的线性回归(http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html#sklearn.linear_model.LinearRegression)来预测下一个交易日的股票指数

#导入类

from sklearn.linear_model import LinearRegression

# 初始化

regressor = LinearRegression()

# predictors变量需要是一个dataframe,而不能是一个series

predictors = sp500[["value"]] # 这是一个dataframe

to_predict = sp500["next_day"] # 这是一个series

# 训练这个线性回归模型

regressor.fit(predictors, to_predict)

# 根据模型生成预测值

next_day_predictions = regressor.predict(predictors)

print(next_day_predictions)

 

评估模型

一个经常用于评估回归模型的指标是均方差(mean squared error, MSE),计算公式:

mse = sum((to_predict - next_day_predictions) ** 2) / len(next_day_predictions)

另外两个常用的指标是根均方差(root mean squared error, RMSE)和平均绝对误差(mean absolute error, MAE)

import math

rmse = math.sqrt(sum((predictions - test["next_day"]) ** 2) / len(predictions))

mae = sum(abs(predictions - test["next_day"])) / len(predictions)

 

在上面的评估模型中存在一个巨大的错误,那就是过度拟合:使用了同样的数据来训练模型和进行预测。想象一下,你告诉他人 2 + 2 等于4,然后问他2 + 2的结果,他可以马上回答你正确的答案,但是他未必明白加法运算的原理,假如你问他3 + 3的结果,他就可能回答不了。同样地,你用一批数据来训练这个回归模型,然后再用同样的数据来进行预测,会造成一个结果,那就是错误率非常低,因为这个模型早就知道了每个正确的值。

用来避免过度拟合的最好方法就是将训练的数据和用来预测(测试)的数据分开

import numpy as np

import random

np.random.seed(1)

random.seed(1)

#将sp500进行随机重排

sp500 = sp500.loc[np.random.permutation(sp500.index)]

# 选择前70%的数据作为训练数据

highest_train_row = int(sp500.shape[0] * .7)

train = sp500.loc[:highest_train_row,:]

#选择后30%的数据作为测试数据

test = sp500.loc[highest_train_row:,:]

regressor = LinearRegression()

predictors = train[[‘value‘]]

to_predict = train[‘next_day‘]

regressor.fit(predictors, to_predict)

next_day_predictions = regressor.predict(test[[‘value‘]])

mse = sum((next_day_predictions - test[‘next_day‘]) ** 2) / len(next_day_predictions)

 

数据可视化

除了上面用来评估模型误差的指标可以说明一个模型的正确性,也可以使用图表来展现,下面做一个散点图,很坐标为测试数据的value列,纵坐标为测试数据的next_day列。然后在上面再做一个折线图,横坐标同样为测试数据的value列,纵坐标为使用模型预测后的结果

import matplotlib.pyplot as plt

plt.scatter(test[‘value‘], test[‘next_day‘])

plt.plot(test[‘value‘], predictions)

plt.show()

时间: 2024-08-29 12:47:48

机器学习简易入门(一) - 线性回归的相关文章

机器学习简易入门(三) - 聚类

摘要:本文简单叙述了如何用聚类来通过投票记录分析美国参议员的实际政治倾向 声明:(本文的内容非原创,但经过本人翻译和总结而来,转载请注明出处) 本文内容来源:https://www.dataquest.io/mission/60/clustering-basics   在前面的两篇文章中使用的线性回归和分类都属于有监督的机器学习(根据已有的数据训练模型,然后预测未知的数据),而无监督的学习则不是尝试预测任何东西,而是寻找数据中的特征,在无监督学习中,有一个重要的方法称为聚类.聚类算法是把具有相同

机器学习入门:线性回归及梯度下降

机器学习入门:线性回归及梯度下降 本文会讲到: (1)线性回归的定义 (2)单变量线性回归 (3)cost function:评价线性回归是否拟合训练集的方法 (4)梯度下降:解决线性回归的方法之一 (5)feature scaling:加快梯度下降执行速度的方法 (6)多变量线性回归   Linear Regression 注意一句话:多变量线性回归之前必须要Feature Scaling! 方法:线性回归属于监督学习,因此方法和监督学习应该是一样的,先给定一个训练集,根据这个训练集学习出一个

机器学习入门实践——线性回归&非线性回归&mnist手写体识别

把一本<白话深度学习与tensorflow>给啃完了,了解了一下基本的BP网络,CNN,RNN这些.感觉实际上算法本身不是特别的深奥难懂,最简单的BP网络基本上学完微积分和概率论就能搞懂,CNN引入的卷积,池化等也是数字图像处理中比较成熟的理论,RNN使用的数学工具相对而言比较高深一些,需要再深入消化消化,最近也在啃白皮书,争取从数学上把这些理论吃透 当然光学理论不太行,还是得要有一些实践的,下面是三个入门级别的,可以用来辅助对BP网络的理解 环境:win10 WSL ubuntu 18.04

《逻辑思维简易入门》(第2版) 阅读笔记二

<逻辑思维简易入门>(第2版) 阅读笔记二 本周阅读的是<逻辑思维简易入门>的第三章,也就是说,本书的第一部分就已经读完了. 第三章.信念的优点 信念和负信念是人们在接受一个事物时一种心理态度,延伸来说也就是对事物的认知态度.因为我们在研究 逻辑思维的时候,都有一个前提:“以正常情况以及说话者真诚”,所以有人如果对于一件事物不做回应,我们可以认为这是一种既不相信,也不怀疑的的态度. 信念的优缺点有很多,在书中主要介绍了下面几种: 1.准确性 好的信念实在准确的表达事实,同样真的信念

Web压力测试工具 LoadRunner12.x简易入门教程--(一)回放与录制

LoadRunner12.x简易入门教程--(一)回放与录制 今天在这里分享一下LoadRunner12.x版本的入门使用方法,希望对刚接触LoadRunner的童鞋有所帮助. LoadRunner12的组成分为三部分,分别是:Virtual User Generator.Controller.Analysis 首先要介绍的是用Virtual User Generator做一个最简单的录制与回放. 打开软件后,界面如下,通过左上角的菜单,我们来新建一个脚本 由于现在Web项目比较多,这里也就用W

【转】机器学习最佳入门学习资料汇总

机器学习最佳入门学习资料汇总 专为机器学习初学者推荐的优质学习资源,帮助初学者快速入门. 这篇文章的确很难写,因为我希望它真正地对初学者有帮助.面前放着一张空白的纸,我坐下来问自己一个难题:面对一个对机器学习领域完全陌生的初学者,我该推荐哪些最适合的库,教程,论文及书籍帮助他们入门? 资源的取舍很让人纠结,我不得不努力从一个机器学习的程序员和初学者的角度去思考哪些资源才是最适合他们的. 我为每种类型的资源选出了其中最佳的学习资料.如果你是一个真正的初学者,并且有兴趣开始机器学习领域的学习,我希望

哈希表简易入门

什么是哈希表 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做哈希函数,存放记录的数组叫做哈希表.哈希表作为一种高效的数据结构,有着广泛的应用.如果哈希函数设计合理,理想情况下每次查询的时间花费仅仅为 O(h/r),即和哈希表容量与剩余容量的比值成正比.只要哈希表容量达到实际使用量的大约 1.5 倍以上,查询花费的时间基本就可以认为恒为 O(1).

机器学习如何入门

作者:Leon链接:https://www.zhihu.com/question/20691338/answer/102249162来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 数 学 很多人翻看任何一本机器学习的书,看到一推的数学公式就开始打退堂鼓了.开始搜索,提问"机器学习需要哪些数学知识?"然后得到的结果可能会是"矩阵分析,概率论,优化设计--"而且还会有大量的人推荐一些例如"All of Statistics&qu

【机器学习快速入门】简单自学机器学习理论

[机器学习快速入门]简单自学机器学习理论 机器学习理论--part I 前言 (第II部分内容点此:第III部分内容点此) 动机 大多数人在小的时候被魔术师以及魔术技巧所迷住,并想弄明白其中的奥秘.有些人会带着这份迷恋研究到更深处并学习魔术技巧,有些人会接受专业的训练,而其他人会继续平庸下去.我在年幼时也尝试过魔术技巧并沉迷于其中,然而后来学习的是另外一种魔术,称作计算机编程. 编程确实酷似魔法, 和魔术一样,自学的现象在计算机编程世界占了上风.在过去的两年计算机开发者调查显示,超过一半的开发者