通过几个例子来了解LR模型
线性回归模型
LR示例:电视广告投放
通过分析数据, 了解电视广告投入x(以百万为单位)与产品销售量y(亿元)的关系。
这里假设其关系为线性关系,y = ax + b.
In [1]:
1 2 3 4
| import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression
|
In [2]:
1 2
| data = pd.read_csv('data/Advertising.csv') data.head()
|
Out[2]:
|
TV |
radio |
newspaper |
sales |
1 |
230.1 |
37.8 |
69.2 |
22.1 |
2 |
44.5 |
39.3 |
45.1 |
10.4 |
3 |
17.2 |
45.9 |
69.3 |
9.3 |
4 |
151.5 |
41.3 |
58.5 |
18.5 |
5 |
180.8 |
10.8 |
58.4 |
12.9 |
In [3]:
Out[3]:
1
| Index(['TV', 'radio', 'newspaper', 'sales'], dtype='object')
|
In [4]:
1 2 3 4 5 6
| plt.figure(figsize=(16,8)) plt.scatter(data['TV'], data['sales'], c='blue') plt.xlabel("Money spent on TV ads") plt.ylabel("Sales") plt.show()
|
训练linear regression模型
In [5]:
1 2 3 4 5 6 7 8
| X = data['TV'].values.reshape(-1,1) y = data['sales'].values.reshape(-1,1)
reg = LinearRegression() reg.fit(X, y)
|
Out[5]:
1
| LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
|
sklearn 默认是矩阵数据输入
In [6]:
1 2 3 4
| display( reg.coef_ ) #coefficient 系数 display( reg.intercept_ ) array([[0.04753664]]) array([7.03259355])
|
In [7]:
1 2 3 4 5 6 7
| print('a = {:.5}'.format(reg.coef_[0][0])) #系数是二维的 print('b = {:.5}'.format(reg.intercept_[0])) #截距为一维数组
print('线性模型为:y = {:.5}X + {:.5}'.format(reg.coef_[0][0], reg.intercept_[0])) a = 0.047537 b = 7.0326 线性模型为:y = 0.047537X + 7.0326
|
In [8]:
Out[8]:
可视化训练好的模型
In [9]:
1 2 3 4 5 6 7 8
| predictions = reg.predict(X)
plt.figure(figsize=(16,8)) plt.scatter(data['TV'], data['sales'], c='blue') plt.plot(data['TV'], predictions, c='red', linewidth=5) plt.xlabel("Money spent on TV ads") plt.ylabel("Sales") plt.show()
|
In [10]:
1 2 3
| display( type(data['TV']) ) data['TV'].shape pandas.core.series.Series
|
Out[10]:
预测
假设公司希望下季度投放一亿元广告,则预期销售量几何?
投入X单位为 百万元,
In [11]:
1 2 3
| predictions = reg.predict([[100],]) #sklearn的输入要求为矩阵 print("投放一亿元广告,则预期销售量为{:.5}亿元".format(predictions[0][0])) 投放一亿元广告,则预期销售量为11.786亿元
|
1 linear regression exercise
气温会随着海拔高度的升高而降低, 我们可以通过测量不同海拔高度的气温来预测海拔高度和气温的关系.
我们假设海拔高度和气温的关系可以使用如下公式表达: y(气温) = a * x(海拔高度) + b
理论上来讲, 确定以上公式 a 和 b的值只需在两个不同高度测试, 就可以算出来 a 和 b 的值了. 但是由于所有的设备都是有误差的, 而使用更多的高度测试的值可以使得预测的值更加准确.
我们提供了在9个不同高度测量的气温值, 请你根据今天学习的线性回归方法预测 a 和 b 的值.
根据这个公式, 我们预测一下在8000米的海拔, 气温会是多少?
数据文件请见exercise/height.vs.temperature.csv
In [12]:
1 2 3 4
| import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression
|
In [13]:
1 2
| data = pd.read_csv('exercise/height.vs.temperature.csv') data.head()
|
Out[13]:
|
height |
temperature |
0 |
0.0 |
12.834044 |
1 |
500.0 |
10.190649 |
2 |
1000.0 |
5.500229 |
3 |
1500.0 |
2.854665 |
4 |
2000.0 |
-0.706488 |
In [14]:
Out[14]:
1
| Index(['height', 'temperature'], dtype='object')
|
In [15]:
1 2 3 4 5
| #plt.figure(figsize=(16,8)) plt.scatter(data['height'], data['temperature'], c='black') plt.xlabel("height") plt.ylabel("Temperature") plt.show()
|
In [16]:
1 2 3 4 5
| X = data['height'].values.reshape(-1,1) y = data['temperature'].values.reshape(-1,1)
reg = LinearRegression() reg.fit(X, y)
|
Out[16]:
1
| LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
|
In [17]:
1 2 3 4 5
| a = reg.coef_[0][0] b = reg.intercept_[0]
print("海拔height与气温temperature之间的线性回归关系为 y = {:.5}X + {:.5}".format(a, b)) 海拔height与气温temperature之间的线性回归关系为 y = -0.0065695X + 12.719
|
In [18]:
1 2 3 4 5 6 7 8
| predictions = reg.predict(X)
plt.scatter(data['height'], data['temperature'], c='black') plt.plot(data['height'], predictions, linewidth=3, c='red') plt.xlabel("height") plt.ylabel("Temperature") plt.show()
|
In [19]:
1 2 3 4
| ## 预测 predictions = reg.predict([[8000],]) print("预测一下在8000米的海拔, 气温为 {:.3} ℃".format(predictions[0][0])) 预测一下在8000米的海拔, 气温为 -39.8 ℃
|
In [20]:
1 2 3
| display( predictions ) type(predictions) array([[-39.8377655]])
|
Out[20]:
2 stock prediction by LR
df['date'] = pd.to_datetime(df['date'])
在天池中报错,有些奇怪。
- 整体套路跟前面的操作方法差不多,但 ==K线图== 不会画.
逻辑回归模型