DC学院学习笔记(十六):线性回归实战

简介: 预测型数据分析:线性回归 sklearn简单实现

预测型数据分析:线性回归

回归:预测数值型变量
分类:预测样本所属类别
聚类:在未知样本类别的情况下,根据样本之间的相似性把样本分成不同的类别

适用:用于股价、房价、空气质量等数值型变量的预测
数学模型:分析两组变量之间的关系
x:自变量(Independent variable)
y:应变量(Dependent variable)
如图是一个线性回归的示意图
image

通过x来预测y,函数:f(x) = y,例如在房价问题中,用房子大小等特征作为自变量,房子价格为应变量
房价回归预测案例:
$x_1$:房子大小
$x_2$:房子楼层
$x_3$:绿化规模
$x_4$:距离最近的地铁站距离
$x_5$:距离最近的公交站距离
$x_6$:是否配备停车位
……
y:房子价格
根据常识来讲,房价和很多因素相关,房子的大小、楼层等等都是比较明显的影响因素,还有一些需要花功夫去寻找的特征。
要寻找一个函数f,将x映射到y上,这就是回归的关键。

回归的经典方法:线性回归
线性回归认为y是x的一个线性的叠加

  • 方程式
    image

向量形式:
image

  • 参数含义
    image

图中y轴上的截距为,回归曲线的斜率代表横坐标变量的系数,即

  • 参数优化方法:监督学习、OLS

    • 监督学习:已有一些训练样本(训练集),同时知道X和y,通过这些已知的样本学习得到回归模型
    • OLS(Ordinary Least Squares):使得预测的y和真实的y在训练集上误差的平方最小

用sklearn实现

1.依旧使用到iris的数据集

import pandas 
iris = pandas.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',header=None)
iris.columns=['SepalLengthCm','SepalWidthCm','PetalLengthCm','PetalWidthCm','Species']
iris.sample(10)


SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm Species
25 5.0 3.0 1.6 0.2 Iris-setosa
28 5.2 3.4 1.4 0.2 Iris-setosa
137 6.4 3.1 5.5 1.8 Iris-virginica
87 6.3 2.3 4.4 1.3 Iris-versicolor
126 6.2 2.8 4.8 1.8 Iris-virginica
30 4.8 3.1 1.6 0.2 Iris-setosa
86 6.7 3.1 4.7 1.5 Iris-versicolor
96 5.7 2.9 4.2 1.3 Iris-versicolor
84 5.4 3.0 4.5 1.5 Iris-versicolor
94 5.6 2.7 4.2 1.3 Iris-versicolor

2. 绘图

import seaborn
%matplotlib inline
#通过画图可以直观地对数据的线性关系做一个观察
seaborn.regplot(x='PetalLengthCm',y='PetalWidthCm',data=iris)

image

3.训练模型

from sklearn import linear_model
lm=linear_model.LinearRegression()
features=['PetalLengthCm']
X=iris[features]
y=iris['PetalWidthCm']
print(X.shape,y.shape)
(150, 1) (150,)

#放入两个特征,X就会多一个维度
features=['PetalLengthCm','SepalLengthCm']
#使用X,y来训练model
model=lm.fit(X,y)
print(model.intercept_,model.coef_)
#从print的结果可以得到回归模型的截距和系数
-0.366514045217 [ 0.41641913]

截距和系数正对应上图中的直线

4.预测数据

#使用model来对数据进行预测,输入X自变量的值,输出y的预测值
#注意多个自变量时的情况,比如:model.predict([1,2])

model.predict(4)
array([ 1.29916248])

预测性能的评估

为了评估获得模型的性能,需要对数据集进行划分,划分为训练集和测试集,在训练集上学习获得模型,在测试集上评估误差

交叉检验

将数据集中的样本等分成多份,每次取其中的一份作为测试集,剩余的数据作为训练集,使用测试集数据评估和检验从训练集学习得到的模型,即进行交叉检验。相对于随机划分,一部分的训练集永远划分在测试集中,交叉检验是将数据划分成若干份,每次用不同的部分作为测试集,则每份都被当做测试集和训练集使用过。

如下图是将数据集划分为五份的交叉检验
image

将数据集分为5份,分别进行5次回归

回归常用的打分函数

  • $MAE=\sum \left | {y}'-y \right |/N$对应的scoring参数为’neg_mean_absolute_error’
  • $MSE=\sum ({y}'-y)^{2}$对应的scoring参数为’neg_mean_squared_error’

得分越高,则代表模型的性能越好

scikit learn中进行交叉检验

from sklearn.model_selection import cross_val_score
#得到5次交叉检验的误差,注意这里cross_val_score()前面用了负号,得到的是每个回归模型的平均绝对值误差
#用MAE举例
scores=-cross_val_score(lm,X,y,cv=5,scoring='neg_mean_absolute_error')
print(scores)
#求平均值,作为误差结果
import numpy as np
print(np.mean(scores))
[ 0.08581817  0.09533821  0.13792154  0.2074044   0.29904645]
0.165105751004

目录
相关文章
|
9月前
|
SQL 安全 Shell
vulnhub靶机实战_DC-3
本文介绍DC-3靶机渗透测试全过程,涵盖环境搭建、信息扫描、SQL注入、权限提升等环节。通过Joomla漏洞获取管理员密码,上传木马并提权至root,最终获取flag,是一套完整的渗透实战流程。
3421 1
|
9月前
|
SQL Shell 网络安全
vulnhub靶机实战_DC-8
本文介绍DC-8靶机渗透全过程,涵盖环境搭建、信息扫描、SQL注入、密码爆破、反向Shell获取及提权。利用sqlmap与john工具破解用户凭据,通过Web表单执行命令并获取root权限,最终读取flag完成渗透测试。
1299 0
|
9月前
|
关系型数据库 MySQL 网络安全
vulnhub靶机实战_DC-7
本文介绍DC-7靶机渗透测试全过程,包括靶机下载、VMware导入、网络配置、Nmap扫描发现开放80和22端口,通过信息搜集获取数据库凭证,尝试登录SSH成功,获得系统访问权限。适合网络安全学习者实践渗透流程。
473 0
|
9月前
|
中间件 测试技术 应用服务中间件
vulnhub靶机实战_DC-5
本教程介绍如何下载并配置DC-5靶机进行安全测试。内容包括靶机下载链接、VMware导入步骤、网络设置及Nmap扫描分析,帮助快速搭建渗透测试环境。
485 0
|
9月前
|
存储 安全 Shell
vulnhub靶机实战_DC-4
本文介绍了DC-4靶机渗透测试的完整过程,包括靶机下载、环境搭建、信息扫描、漏洞利用、提权以及最终获取flag的详细步骤。通过使用工具如nmap、Hydra进行端口扫描与密码爆破,结合反向Shell与teehee命令实现权限提升,最终成功获取系统flag。内容详实,适合网络安全学习与实践。
1317 0
vulnhub靶机实战_DC-4
|
9月前
|
安全 网络安全 开发工具
vulnhub靶机实战_DC-2
本文介绍了DC-2靶机的渗透测试实战过程,涵盖靶机下载、环境搭建、信息扫描、漏洞利用、权限提升及最终提权获取flag的完整流程。内容包括使用nmap扫描、WPScan和Hydra工具爆破登录信息,绕过rbash限制,利用git提权等关键技术步骤。
790 0
|
9月前
|
安全 网络安全 数据库
vulnhub靶机实战_DC-1
本实验通过启动靶机、扫描漏洞、攻击Drupal服务、获取数据库权限、提权至root,最终成功获取所有flag,完成渗透测试目标。
845 0
vulnhub靶机实战_DC-1
|
安全 网络安全 网络虚拟化
高速通道和物理专线介绍|学习笔记
快速学习高速通道和物理专线介绍
高速通道和物理专线介绍|学习笔记
|
弹性计算 网络安全 数据中心
高速通道和云企业网|学习笔记
快速学习高速通道和云企业网
高速通道和云企业网|学习笔记
|
测试技术 数据中心 网络架构
专线接入流程|学习笔记
快速学习专线接入流程