ML算法——线性回归随笔【机器学习】【六一创作】

news/2025/4/2 15:32:30/

文章目录

  • 10、线性回归
    • 10.1、理论部分
    • 10.2、sklearn 实现
    • 10.3、案例

10、线性回归

10.1、理论部分

利用线性回归方程的最小二乘函数对一个或多个自变量和因变量之间的关系进行建模的方法。

(继续完善公式推导、解析解的公式过程)

10.2、sklearn 实现

from sklearn.linear_model import LinearRegression
from sklearn import preprocessing

训练 & 评估

lr = LinearRegression()
lr.fit(X_train, y_train)
lr.score(X_test, y_test) # 使用绝对系数 R^2 

预测

Forecast = lr.predict(X_Predict)

10.3、案例

股票预测

预处理:

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt
from datetime import datetime as dt

获取数据

import tushare as tsdf = ts.get_hist_data('000001') #平安银行代码 000001
df.to_csv('000001.csv')
df = pd.read_csv('./000001.csv') 

股票数据的特征

  • date:日期
  • open:开盘价
  • high:最高价
  • close:收盘价
  • low:最低价
  • volume:成交量
  • price_change:价格变动
  • p_change:涨跌幅
  • ma5:5日均价
  • ma10:10日均价
  • ma20:20日均价
  • v_ma5:5日均量
  • v_ma10:10日均量
  • v_ma20:20日均量

将每一个数据的键值的类型从字符串转为日期

df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')
# 按照时间升序排列
df.sort_values(by=['date'], inplace=True, ascending=True)

缺失值检测

df.dropna(axis=0 , inplace=True)
df.isna().sum()

绘制K线图:

Min_date = df.index.min()
Max_date = df.index.max()
print ("First date is",Min_date)
print ("Last date is",Max_date)
print (Max_date - Min_date)
from plotly import tools
from plotly.graph_objs import *
from plotly.offline import init_notebook_mode, iplot, iplot_mpl
init_notebook_mode()
import plotly.plotly as py
import plotly.graph_objs as gotrace = go.Ohlc(x=df.index, open=df['open'], high=df['high'], low=df['low'], close=df['close'])
data = [trace]
iplot(data, filename='simple_ohlc')

线性回归部分

from sklearn.linear_model import LinearRegression
from sklearn import preprocessing

创建新的列, 包含预测值, 根据当前的数据预测5天以后的收盘价

num = 5 # 预测5天后的情况
df['label'] = df['close'].shift(-num) # 预测值

丢弃 label, price_change, p_change, 不需要它们做预测

Data = df.drop(['label', 'price_change', 'p_change'],axis=1)X = Data.values
X = preprocessing.scale(X)
X = X[:-num]df.dropna(inplace=True)#去掉缺失值所在的行
Target = df.label
y = Target.values

将数据分为训练数据和测试数据

X_train, y_train = X[0:550, :], y[0:550]
X_test, y_test = X[550:, -51:], y[550:606]

训练 & 评估

lr = LinearRegression()
lr.fit(X_train, y_train)
lr.score(X_test, y_test) #训练好的lr 投喂 X_test得到 pred_test 与 y_test 做评估,越大越好
# 预测
X_Predict = X[-num:] #取最后 num 条数据
Forecast = lr.predict(X_Predict)

画图 预测结果
预测 2019-05-13 到 2019-05-17 , 一共 5 天的收盘价

trange = pd.date_range('2019-05-13', periods=num, freq='d')

产生预测值

Predict_df = pd.DataFrame(Forecast, index=trange)
Predict_df.columns = ['forecast']

将预测值添加到原始

df = pd.read_csv('./000001.csv') 
df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')

按照时间升序排列

df.sort_values(by=['date'], inplace=True, ascending=True)
df_concat = pd.concat([df, Predict_df], axis=1)df_concat = df_concat[df_concat.index.isin(Predict_df.index)]
df_concat.tail(num)

画预测值和实际值

df_concat['close'].plot(color='green', linewidth=1)
df_concat['forecast'].plot(color='orange', linewidth=3)
plt.xlabel('Time')
plt.ylabel('Price')
plt.show()

理解模型

for idx, col_name in enumerate(['open', 'high', 'close', 'low', 'volume', 'ma5', 'ma10', 'ma20', 'v_ma5', 'v_ma10', 'v_ma20']):print("The coefficient for {} is {}".format(col_name, lr.coef_[idx]))

http://www.ppmy.cn/news/109864.html

相关文章

驱动LSM6DS3TR-C实现高效运动检测与数据采集(3)----获取ID

概述 一旦传感器被正确初始化,可以通过SPI或I2C接口向传感器发送读取命令,并接收传感器返回的数据。这个读取过程包括获取LSM6DS3TR传感器提供的加速度计和陀螺仪数据,以及传感器对应的温度信息。 获取数据状态 STATUS_REG (1Eh)是该传感器…

Scala 类和对象

1.类和对象 类:可以看成一个模板 对象:表示具体的事物 定义类 回顾:Java中的类 如果类是public的,则必须和文件名一致。 一般,一个.java有一个public类 注意:Scala中没有public,一个.scala中可以…

Scala函数

1.基本语法 解析main方法 def main(args: Array[String]): Unit {函数体}*def 关键字,声明一个函数 * main 方法名 * args 参数名称 * Array[String] 参数的类型 * Unit 返回值类型,相当于Java中的void,没有返回值 * {} 函数体函数省略规则 …

C语言——数据在内存中的存储(上)

数据在内存中的存储 1. 数据类型的介绍 之前已经介绍过C语言中的基本数据类型了,主要有: char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数 注意:C语言中是是没…

在idea中创建一个SpringBoot模块

方式一:自动创建(需要联网) 第一步:新建模块 按住ctrlshiftalts,打开项目结构,选择新建模块; 第二步:选择Spring Web (1)选择SpringBoot版本&#xff0c…

UNIX网络编程卷一 学习笔记 第十七章 ioctl操作

ioctl函数传统上一直作为那些不适合归入现有已定义类别的特性的系统接口。POSIX正在通过创建特定的包装函数来代替ioctl函数的某些功能,以取而代之的是那些已被POSIX标准化的函数。例如,Unix终端接口传统上使用ioctl函数访问,而POSIX为终端创…

【SpringCloud】SpringAMQP

文章目录 1、AMQP2、基本消息模型队列3、WorkQueue模型4、发布订阅模型5、发布订阅-Fanout Exchange6、发布订阅-DirectExchange7、发布订阅-TopicExchange 1、AMQP Advanced Message Queuing Protocol,高级消息队列协议。是用于在应用程序之间传递业务消息的开放标…

spring security的java功能演示

下面是一个使用Java和Spring Security的详细示例代码。该示例演示了如何设置身份验证和授权规则,并保护特定的URL路径。请注意,这只是一个基本示例,您可以根据自己的需求进行修改和扩展。 首先,确保您已经安装了Java开发环境&…