在(一)里面,只是对一元回归简单初步了解。这一部分是多元回归的方法。
比如,一个企业做广告,有三个途径:一是电视、二是广播、三是报纸,哪个途径最好。如果广告费用总额是一个预算(固定的),那怎么投放广告才是最好的?
数据在南加州大学网站上http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv
数据有200条。TV\Radio\Newspaper是在电视、广播、报纸上做广告的费用。Sales是产品销量。
方程:
# -*- coding: utf-8 -*-
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 读取数据
data = pd.read_csv('./Advertising.csv', index_col=0)
# 散点图看各自变量与因变量之间的关系
sns.pairplot(data, x_vars=['TV','radio','newspaper'], y_vars='sales', size=7, aspect=0.8, kind='reg')
plt.show()
构建训练集和测试集,分别保存在X_train、X_test和y_train、y_test中。再用(一)里面的回归计算。
# -*- coding: utf-8 -*-
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression as LR
from sklearn import metrics
import numpy as np
X = data[['TV', 'radio', 'newspaper']]
y = data['sales']
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
linreg = LR()
linreg.fit(X_train, y_train)
print (linreg.intercept_)
print (linreg.coef_)
结果: 2.87696662231793 [0.04656457 0.17915812 0.00345046]
预测一下,并看看误差:
y_pred = linreg.predict(X_test)
print (np.sqrt(metrics.mean_squared_error(y_test, y_pred)))
标准误差:1.4046514230328953
画一下实际与预测曲线:
plt.figure()
plt.plot(range(len(y_pred)),y_pred,'b',label="predict")
plt.plot(range(len(y_pred)),y_test,'r',label="test")
plt.legend(loc="upper right") #显示图中的标签
plt.xlabel("the number of sales")
plt.ylabel('value of sales')
plt.show()