回归分析大法

函数时从自变量到因变量的一种映射关系,在一些问题当中,常常子网根据已有数据确定目标变量(输出 及因变量)与其他变量(输入 及自变量)当观测到新的输入时,预测其可能的输出值。

回归分析 Regression analysis

是确定两种 变量间相互依赖的定量的关系的一种统计分析方法。
常用的回归方式包括 线性回归 逻辑回归 多项式回归 逐步回归 岭回归,套索回归 弹性网络回归。

线性回归

一般使用最小二乘法实现,最小化每个数据点导线的垂直偏差平方和来计算最佳拟合线。

使用scikit-learn 进行线性回归

使用LinearRegression()进行一元线性回归。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.linear_model import LinearRegression
#读取数据文件
path='D:\\pythonProject2\\exercise\\'
X = pd.read_csv(path+'1x_regression.csv',sep = ',',encoding = 'utf-8').values
plt.rcParams['font.sans-serif'] = 'SimHei'#设置字体为SimHei显示中文\n",
plt.rcParams['axes.unicode_minus']=False#坐标轴刻度显示负号\n",
plt.rc('font', size=14)#设置图中字号大小\n",
plt.figure(figsize=(4, 3))
plt.title('原始数据散点图')
plt.xlabel('x')#添加横轴标签\n",
plt.ylabel('y')#添加纵轴标签\n",
#绘制原始数据散点图,观察其特征\n",
plt.scatter(X[:,0], X[:,1])
plt.show()

输出数据

lr = LinearRegression()#生成线性回归模型实例\n",
#可视化\n",
plt.figure(figsize=(4, 3))
lr.fit(X[:,0].reshape(-1,1), X[:,1].reshape(-1,1))#训练\n",
#数据集包含两列数据 。fit的知识训练集和目标,
#将原始数据与回归曲线画在一张图上\n",
plt.scatter(X[:,0], X[:,1])
plt.plot(X[:,0], lr.predict(X[:,0].reshape(-1,1)), 'k-')
plt.title('原始数据与回归方程图')
plt.xlabel('x')#添加横轴标签\n",
plt.ylabel('y')#添加纵轴标签\n",
plt.show()

数据集的样子
在这里插入图片描述
fit(X,Y
在这里插入图片描述
后续可以将回归方程进行输出出来,可以看到
在这里插入图片描述
使用训练模型的时候预测自变量为从0到9 的整数的时候。因变量目标的值。

岭回归

对于有些矩阵,矩阵中的某个元素的一个很小的变动,就会导致最后的误差很大,岭回归是一种专用于共线性数据分析的有偏估计回归方法,实际上是一种改良版的最小二乘估计法。

使用Ridge()进行岭回归

首先生成具有共线性特征的分类数据集,以对各个特征设置系数。

在这里插入图片描述
可以看出,多个特征之间表现出了明显的线性特征,下面将为这个特征设置系数,截距,生成多元线性回归样本。并对样本进行岭回归分析。
在这里插入图片描述
从上图中可以看出随着alpha的增加,拟合的回归值越来越接近0 又没到0

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn import datasets
n_samples=100
#生成具有冗余特征(共线性)的分类样本集\n",
X, y = datasets.make_classification(n_samples=n_samples, n_features=10,
                                   n_informative=2, n_redundant=7,
                                    n_classes=2)
import seaborn as sns
sns.pairplot(pd.DataFrame(X))
plt.show()

b,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9=3,-5,4,8,-9,-3,6,2,-1,3,7
###此处是为了多个线性特征设置系数,截距,生成多元线性回归样本。并对样本进行岭回归分析。
noise=np.random.randn(n_samples)
#叠加噪声生成回归目标集\n",
y=2*noise+b+a0*X[:,0]+a1*X[:,1]+a2*X[:,2]+a3*X[:,3]+a4*X[:,4]+\
a5*X[:,5]+a6*X[:,6]+a7*X[:,7]+a8*X[:,8]+a9*X[:,9]
from sklearn import linear_model
#可视化,绘制真实系数与回归分析系数对比图\n",
plt.figure(figsize=(6,4))
plt.rc('font', size=14)#设置图中字号大
plt.rcParams['font.sans-serif'] = 'SimHei'#设置字体为SimHei显示中文\n",
plt.rcParams['axes.unicode_minus']=False#坐标轴刻度显示负号\n",
plt.plot([b,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9],marker='o')#真实系数\n",
label=[]#该行代码书本中没有,应添加\n",
for alpha in [0.001,100,1000]:
    ridge = linear_model.Ridge(alpha=alpha)
    ridge.fit(X, y)#拟合模型\n",
    plt.plot(np.append(ridge.intercept_,ridge.coef_),marker='*')#拟合系数\n",
    np.append(label,np.str_(alpha))
plt.legend(['实际系数','alpha=0.001', 'alpha=100','alpha=1000'])
plt.xlim(-1,20)
plt.title('拟合系数与实际系数对比')
plt.xlabel('变量Xi')#添加横轴标签\n",
plt.ylabel('变量Xi的系数')#添加纵轴标签\n",
plt.show()

逻辑回归

与线性回归不同之处在于,线性回归的预测结果往往都是数字,而逻辑回归属于分类算法,预测的结果都是离散的分类,如判断用户是否会点击某条广告,因此逻辑回归是一种很经典的二分类算法。

在这里插入图片描述
使用fit(X,y)训练逻辑回归模型,使用predict(x)预测x的类别。
在这里插入图片描述
将预测结果与实际结果进行对比,绘制预测错误的样本的散点图。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值