【P27 回归算法及应用实践】

回归算法及应用实践

1 相关与回归

在这里插入图片描述

1.1 有监督的机器学习过程

在这里插入图片描述

1.2 分类与回归

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3 一个简单的案例

在这里插入图片描述

1.4 回归分析与相关分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.5 相关分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1.6 实例
在这里插入图片描述
在这里插入图片描述

import numpy as np 
import pandas as pd

investment = [20,40,20,30,10,10,20,20,20,30]
production = [30,60,40,60,30,40,40,50,30,70]

df = pd.DataFrame({'investment':np.array(investment),'production':np.array(production)})
print(df)
print(df.corr())

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
字母u是指 unicode

A = [250,360,165,43,92,200,355,290,230,120,73,205,400,320,72,272,94,190,235,139]
B = [35,29,36,60,65,30,10,70,21,55,54,48,20,39,60,20,58,40,27,30]
C = [3,4,7,6,5,5,6,10,9,2,12,5,5,4,8,5,7,8,9,7]
D = [6,10,3,9,6,5,7,10,11,5,4,1,15,7,6,8,3,11,8,5]

df = pd.DataFrame({'取暖费':np.array(A),'温度':np.array(B),'厚度':np.array(C),'年份':np.array(D)})
print(df)
print(df.corr()) # ABCD全部之间的相互和关系
print(df.corr()[u'温度'])# 温度和ABCD之间的关系
print(df[u'取暖费'].corr(df[u'温度']))  #取暖的费和温度之间的关系

在这里插入图片描述
在这里插入图片描述

2 一元线性回归和最小二乘法

2.1 回归问题

在这里插入图片描述

2.2 一元线性回归

在这里插入图片描述
在这里插入图片描述

2.3 最小二乘法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4 实战 可支配收入与销售量

在这里插入图片描述

X = [522,539,577,613,644,670,695,713,741,769,801,855,842,860,890,920]
Y = [6700,7136,7658,7784,8108,7583,8002,8442,8158,8683,9317,9675,8542,8584,9612,9719]
x = np.array(X).reshape(-1,1)#reshape(行数,列数)常用来更改数据的行列数目,reshape(-1,1)表示(任意行,1列)
y = np.array(Y).reshape(-1,1)# reshape(-1,1)表示(任意行,1列) reshape(1,-1)表示(1行,任意列)
# 相关性 案例三
X = [522,539,577,613,644,670,695,713,741,769,801,855,842,860,890,920]
Y = [6700,7136,7658,7784,8108,7583,8002,8442,8158,8683,9317,9675,8542,8584,9612,9719]
x = np.array(X).reshape(-1,1)#reshape(行数,列数)常用来更改数据的行列数目,reshape(-1,1)表示(任意行,1列)
y = np.array(Y).reshape(-1,1)# reshape(-1,1)表示(任意行,1列) reshape(1,-1)表示(1行,任意列)


model = linear_model.LinearRegression() #线性回归函数
model.fit(x,y)  # fit函数主要用来计算一组数据的特征值,用于训练
print(model.coef_) #b1
print(model.intercept_)# b0

在这里插入图片描述

在这里插入图片描述

2.4.1 为什么要用reshape(-1,1) ?

reshape(1,-1)什么意思?

reshape(行数,列数)常用来更改数据的行列数目
一般可用于numpy的array和ndarray, pandas的dataframe和series(series需要先用series.values把对象转化成ndarray结构)

print(X)
print(x)

在这里插入图片描述

x = np.array(X)

print(X)
print(x)

在这里插入图片描述

X = [522,539,577,613,644,670,695,713,741,769,801,855,842,860,890,920]
print(X)

x = np.array(X)
print(x.shape)
print(x)

x = np.array(X).reshape(-1,1)#reshape(行数,列数)常用来更改数据的行列数目,reshape(-1,1)表示(任意行,1列)
print(x.shape)
print(x)

在这里插入图片描述

2.4.2 本节完整代码

import numpy as np 
import pandas as pd
from sklearn import linear_model


# 相关性 案例一
investment = [20,40,20,30,10,10,20,20,20,30]
production = [30,60,40,60,30,40,40,50,30,70]

df = pd.DataFrame({'investment':np.array(investment),'production':np.array(production)})
print(df)
print(df.corr())


# 相关性 案例二
A = [250,360,165,43,92,200,355,290,230,120,73,205,400,320,72,272,94,190,235,139]
B = [35,29,36,60,65,30,10,70,21,55,54,48,20,39,60,20,58,40,27,30]
C = [3,4,7,6,5,5,6,10,9,2,12,5,5,4,8,5,7,8,9,7]
D = [6,10,3,9,6,5,7,10,11,5,4,1,15,7,6,8,3,11,8,5]

df = pd.DataFrame({'取暖费':np.array(A),'温度':np.array(B),'厚度':np.array(C),'年份':np.array(D)})
print(df)
print(df.corr()) # ABCD全部之间的相互和关系
print(df.corr()[u'温度'])# 温度和ABCD之间的关系
print(df[u'取暖费'].corr(df[u'温度']))  #取暖的费和温度之间的关系


# 相关性 案例三
X = [522,539,577,613,644,670,695,713,741,769,801,855,842,860,890,920]
Y = [6700,7136,7658,7784,8108,7583,8002,8442,8158,8683,9317,9675,8542,8584,9612,9719]
x = np.array(X).reshape(-1,1)#reshape(行数,列数)常用来更改数据的行列数目,reshape(-1,1)表示(任意行,1列)
y = np.array(Y).reshape(-1,1)# reshape(-1,1)表示(任意行,1列) reshape(1,-1)表示(1行,任意列)


model = linear_model.LinearRegression() #线性回归函数
model.fit(x,y)  # fit函数主要用来计算一组数据的特征值,用于训练
print(model.coef_) #b1
print(model.intercept_)# b0

3 多元回归与梯度下降

3.1 简单例子

在这里插入图片描述
在这里插入图片描述

3.2 多元线性回归

在这里插入图片描述
在这里插入图片描述

3.3 梯度下降法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.4 学习率

通常一开始,学习率步长大一点,到后面越来越接近了,学习率调小
在这里插入图片描述

3.5 梯度下降法 求解2.4例子:取暖费

A = [250,360,165,43,92,200,355,290,230,120,73,205,400,320,72,272,94,190,235,139]
B = [35,29,36,60,65,30,10,70,21,55,54,48,20,39,60,20,58,40,27,30]
C = [3,4,7,6,5,5,6,10,9,2,12,5,5,4,8,5,7,8,9,7]
D = [6,10,3,9,6,5,7,10,11,5,4,1,15,7,6,8,3,11,8,5]


## 梯度下降发 求解案例三:取暖费
x = np.array([B,C,D]).T
y = np.array(A).reshape(-1,1)
model = linear_model.LinearRegression()
model.fit(x,y) #训练训练模型

#
print(model.coef_)
print(model.intercept_)

#test
test = np.array([30,5,10]).reshape(1,3)
print('取暖费:',model.predict(test))

在这里插入图片描述

4 回归算法及应用 完整代码

import numpy as np 
import pandas as pd
from sklearn import linear_model


## 相关性 案例一:投入和产出
investment = [20,40,20,30,10,10,20,20,20,30]
production = [30,60,40,60,30,40,40,50,30,70]

df = pd.DataFrame({'investment':np.array(investment),'production':np.array(production)})
print(df)
print(df.corr())


## 相关性 案例二:取暖费
A = [250,360,165,43,92,200,355,290,230,120,73,205,400,320,72,272,94,190,235,139]
B = [35,29,36,60,65,30,10,70,21,55,54,48,20,39,60,20,58,40,27,30]
C = [3,4,7,6,5,5,6,10,9,2,12,5,5,4,8,5,7,8,9,7]
D = [6,10,3,9,6,5,7,10,11,5,4,1,15,7,6,8,3,11,8,5]

df = pd.DataFrame({'取暖费':np.array(A),'温度':np.array(B),'厚度':np.array(C),'年份':np.array(D)})
print(df)
print(df.corr()) # ABCD全部之间的相互和关系
print(df.corr()[u'温度'])# 温度和ABCD之间的关系
print(df[u'取暖费'].corr(df[u'温度']))  #取暖的费和温度之间的关系


## 相关性 案例三:可支配收入与销售量
X = [522,539,577,613,644,670,695,713,741,769,801,855,842,860,890,920]
Y = [6700,7136,7658,7784,8108,7583,8002,8442,8158,8683,9317,9675,8542,8584,9612,9719]
x = np.array(X).reshape(-1,1)#reshape(行数,列数)常用来更改数据的行列数目,reshape(-1,1)表示(任意行,1列)
y = np.array(Y).reshape(-1,1)# reshape(-1,1)表示(任意行,1列) reshape(1,-1)表示(1行,任意列)


model = linear_model.LinearRegression() #线性回归函数
model.fit(x,y)  # fit函数主要用来计算一组数据的特征值,用于训练训练模型
print(model.coef_) #b1
print(model.intercept_)# b0


## 梯度下降发 求解案例三:取暖费
x = np.array([B,C,D]).T
y = np.array(A).reshape(-1,1)
model = linear_model.LinearRegression()
model.fit(x,y) #训练训练模型

#
print(model.coef_)
print(model.intercept_)

#test
test = np.array([30,5,10]).reshape(1,3)
print('取暖费:',model.predict(test))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

R-G-B

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值