sk-learn多元线性回归

《scikit-learn》

在机器学习和数据挖掘的应用中,scikit-learn是一个功能强大的python包。在数据量不是过大的情况下,可以解决大部分问题,这里介绍几个概念
估计器(Estimator)
估计器,很多时候可以直接理解成分类器,主要包含两个函数:
fit():训练算法,设置内部参数。接收训练集和类别两个参数。
predict():预测测试集类别,参数为测试集。
大多数scikit-learn估计器接收和输出的数据格式均为numpy数组或类似格式。
模型评估(度量)
包:sklearn.metrics
sklearn.metrics包含评分方法、性能度量、成对度量和距离计算。
回归结果度量
explained_varicance_score:可解释方差的回归评分函数
mean_absolute_error:平均绝对误差
mean_squared_error:平均平方误差

实例展示:

样本数据如下(列举一部分),我们通过不同的广告投入,预测产品销量。

步骤:

1.首先打开终端模拟器,输入下面命令:jupyter notebook --ip=‘127.0.0.1’,
2.切换到/data目录下,点击New,在其下拉框中选择folder,选中刚才创建的文件夹,点击页面左上角的【Rename】,重命名为m_linear_regression
3.切换到m_linear_regression 目录下,新建一个ipynb文件,用于编写并执行代码。点击页面右上角的New,选中【Python3】
4.多元线性回归分析
在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。
我们将通过以下9个步骤开始学习多元线性回归
1.业务理解
现有一张产品不同广告渠道的销量汇总表
特征:
TV:对于一个给定市场中单一产品,用于电视上的广告费用(以千为单位)
Radio:在广播媒体上投资的广告费用
Newspaper:用于报纸媒体的广告费用
响应:
Sales:对应产品的销量
现在要分析Sales和TV、Radio、Newspaper多个变量之间的关系,即多元线性回归分析
2.读取数据

1.#导入pandas库和numpy库  
2.import pandas as pd  
3.import numpy as np  
4.#读取women.csv  
5.data= pd.read_csv('Advertising.csv', header=0)  
6.#读取前五行数据,如果是最后五行,用df_women.tail()  
7.data.head()  

3.数据理解
3.1.查看数据结构

data.shape 

3.2.查看列名

data.columns  

3.3.查看描述统计

data.describe()  

说明:
count计数:说明总共有200行,即200个记录;
mean均值:不同渠道广告费用的平均数;
std标准偏差:标准偏差(Std Dev,Standard Deviation) -统计学名词。一种度量数据分布的分散程度之标准,用以衡量数据值偏离算术平均值的程度。标准偏差越小,这些值偏离平均值就越少,反之亦然。
min、max最小值和最大值
分位数(Quantile),也称分位点,是指将一个随机变量的概率分布范围分为几个等份的数值点,分析其数据变量的趋势
3.4.可视化特征与响应之间的关系,绘制散点图

import matplotlib.pyplot as plt  
%matplotlib inline  
#seaborn也是一个可视化库  
import seaborn as sns  
sns.pairplot(data, x_vars=['TV','radio','newspaper'],y_vars='sales', size=7, aspect=0.8, kind='reg')  
plt.show()  

4.数据准备
4.1.删除Number和sales这两列数据得到一个新的二维数组

1.Data = data.drop(['Number','sales'],axis=1)  
2.Data.head()  

4.2.获取原数据中的sales这一列数据

1.sales = data['sales']  
2.type(sales)  

4.3.将多维的数组降为1维

1.import numpy as np  
2.sales = np.ravel(sales)  
3.type(sales)  

4.4.构造训练集和测试集

from sklearn.model_selection  import train_test_split  
X_train, X_test, y_train, y_test = train_test_split(Data, sales, test_size=0.2,random_state=1)   
print(X_train.shape)  
print(y_train.shape)  
print(X_test.shape)  
print(y_test.shape)  

5.构建线性回归模型

1.#Scikit-learn的线性回归  
2.#导入model  
3.from sklearn.linear_model import LinearRegression  
4.#实例化线性回归  
5.linreg = LinearRegression()  
6.#将模型拟合到训练数据  
7.linreg.fit(X_train, y_train)  
8.#打印模型的系数  
9.print(linreg.intercept_)  
10.print(linreg.coef_)  

6.模型预测
对测试集进行预测

1.#预测  
2.y_pred = linreg.predict(X_test)  
3.y_pred   

7.模型评价
模型评估scikit-learn提供了包和方法
包:sklearn.metrics
sklearn.metrics包含评分方法、性能度量、成对度量和距离计算。
7.1.将预测数据和测试数据绘制成图表形式

1.#模型评价  
2.import matplotlib.pyplot as plt  
3.plt.figure()  
4.plt.plot(range(len(y_pred)),y_pred,'b',label='predict')  
5.plt.plot(range(len(y_pred)),y_test,'r',label='test')  
6.plt.legend(loc='upper right')  
7.plt.xlabel('the number of sales')  
8.plt.ylabel('value of sales')  
9.plt.show()  

7.2.计算均方根误差RMSE来评估模型
对于分类问题,评价测度是准确率,但这种方法不适用于回归问题。我们使用针对连续数值的评价测度(evaluation metrics)。下面介绍三种常用的针对回归问题的评价测度
(1)平均绝对误差(Mean Absolute Error, MAE),对应方法:metrics.mean_absolute_error(true, pred)
(2)均方误差(Mean Squared Error, MSE),对应方法:metrics.mean_squared_error(true, pred)
(3)均方根误差(Root Mean Squared Error, RMSE),对应方法:np.sqrt(metrics.mean_squared_error(true, pred))
代码如下:

1.from sklearn import metrics  
2.import numpy as np  
np.sqrt(metrics.mean_squared_error(y_test, y_pred)) 

RMSE的值为:1.4046514230328953,在之前展示的数据中,我们看到Newspaper和销量之间的线性关系比较弱,现在我们移除这个特征,看看线性回归预测的结果的RMSE如何?

1.feature_cols = ['TV', 'radio']  
2.X = data[feature_cols]  
3.y = data.sales  
4.X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,random_state=1)  
5.linreg.fit(X_train, y_train)  
6.y_pred = linreg.predict(X_test)  
np.sqrt(metrics.mean_squared_error(y_test, y_pred)) 

我们将Newspaper这个特征移除之后,得到RMSE变小了,说明Newspaper特征不适合作为预测销量的特征,于是,我们得到了新的模型。我们还可以通过不同的特征组合得到新的模型,看看最终的误差是如何的。

发布了32 篇原创文章 · 获赞 28 · 访问量 1386

猜你喜欢

转载自blog.csdn.net/Maqiuqiu520/article/details/103026645