[github-100天机器学习]day3 multiple linear regression--代码版本问题已修正

这篇具有很好参考价值的文章主要介绍了[github-100天机器学习]day3 multiple linear regression--代码版本问题已修正。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

https://github.com/LiuChuang0059/100days-ML-code/blob/master/Day3_Multiple_Linear_regression/README.md

多元线性回归

一个线性方程适配观测数据,建立特征和响应之间的关系。可以用来找出预测结果在哪个因素影响最大 ,不同变量如何关联。

y = b 0 + b 1 x 1 + b 2 x 2 + . . . + b n x n y = b_0+b_1x_1+b_2x_2+...+b_nx_n y=b0+b1x1+b2x2+...+bnxn

前提:

  1. 线性:特征值和预测值线性相关
  2. 保持误差项的方差齐性(常数方差):误差项的分散(方差)必须等同(线性回归的误差项在不同的预测值范围内有同样的方差,误差项的方差在各个预测值下保持不变。即误差项之间是独立的,一个误差不会影响其他误差。)—齐性
  3. 多元正态分布:多元回归假定残差符合正态分布(残差:实际观测值与模型估计值之间的差)
  4. 缺少多重共线性:假设数据有极少甚至没有多重特征。当特征不是相互独立的时候,会引发多重共线性。—独立性

ps: 误差(error):是观察值与真实值之间的差,经典测量理论基本假设是–观察值等于真值加上误差。任何一次测量都带有误差(每一次测量的这个误差具体是多少是不清楚的,只有把所有测量结果进行分析后才知道误差有多大),经典测验理论认为误差是随机分布,且误差均值为0。因此,经过多次测验后,将观测值求平均就可以看作为真值。也就是说,多次测量求得的平均数是真值的最佳估计。**残差(residual)**是观察值与模型估计值之间的差。以回归分析为例,回归方程y=b0+b1x,当知道b0和b1时这就是一个真实的回归模型。比如y=2+3x。取一个数值(1,2),则模型估计值为y=2+3×1=5。残差为2-5=-3。因此,只要有一个确定的取值以及模型,则模型肯定有一个估计值,也就有一个残差了
来源:https://zhuanlan.zhihu.com/p/98643701
方差齐性,也就是方差相等。两组和多组比较中,方差齐性的意思很容易理解,无非就是比较各组的方差大小,看看各组的方差是不是差不多大小,如果差别太大,就认为是方差不齐,或方差不等。如果差别不大,就认为方差齐性或方差相等。这种所谓的差别大或小,需要统计学的检验,所以就有了方差齐性检验。
在线性回归中,有的人就不理解方差齐性是什么意思了。因为线性回归中自变量x不是分类变量,x取值很多。通常情况下,每个x值只对应1个y值。比如,分析身高对血压值的影响,可能每个身高对应的血压值只有一个数值。尽管在一次抽样中每个x取值上可能只有1个y值,但对于总体而言,理论上每个x取值上对应的y值是有很多的。尽管在一次抽样中每一身高值(如170cm)所对应的血压值可能只有1个值(如140mmHg),但从总体而言这一固定的身高(170cm)所对应的血压值应该有很多,可能是140mmHg,也可能是150mmHg,只是在我们的抽样中恰好抽中了这1个值而已。如果你重新抽样,170cm所对应的血压值可能就不是140mmHg了,有可能就是145mmHg或138mmHg等。所以,线性回归中,理论上也是有方差的。然而这种理论上的方差,除非你知道总体中每个x取值上的所有对应的y值,否则你是没有办法真正去计算方差的。但这种情况几乎是不可能发生的,因此在线性回归中的方差齐性检验,很多情况下只是一种探测而已。
来源:https://zhuanlan.zhihu.com/p/93270816

注意:

过多变量可能降低模型的精确度,尤其是对结果无关的变量,或存在对其他变量造成很大影响的变量。有一些变量选择方法:

  1. 向前选择法(forward selection): 一个个加入feature
    (1)选择一个差异等级significance level,如SL=0.05表示有95%贡献
    (2)建立回归模型,找到最小P值
    (3)确立一个简单模型,将有最小P值的变量加入此模型
    (4)如果P>SL,模型建立成功,否则转回(3)
  2. 向后选择法Backward Elimination:首先包含了所有的feature,然后每个feature都尝试去删除,测试删除的哪个feature对模型准确性有最大的提升,最终删掉对模型提升最高的一个特征。如此类推,直到删除feature并不能提升模型为止。
  3. 向前向后法:结合1和2,先用1筛选一遍,在用2筛选一遍,知道最后无论怎么筛选模型变量都不再发生变化。当一个feature新加入后,stepwise会尝试删去一个feature,直至达到某个预设的标准。这种方法的缺点是,预设的标准不好定,而且容易陷入到过拟合当中

虚(拟)变量

数据集是非数值数据类型时,使用分类数据时非常有效的。(分类数据:反映事物类别,是离散数据,分类属性有限且无序。如男女用0,1表示)

虚拟变量陷阱

虚拟变量限制指两个或两个以上变量之间高度相关,即存在一个能够被其他变量预测出的变量。(如一个存在重复类别的例子,舍弃男性类别,该类型也可用女性类别定义,即女性值为0表示男性)。

解决方法:变量类别减1:假定m个类别,模型构建取m-1个虚拟变量,减去的那个变量看作参照值。
D 2 = 1 − D 1 D_2 = 1- D_1 D2=1D1
y = b 0 + b 1 x 1 + b 2 x 2 + b 3 D 1 y = b_0+b_1x_1+b_2x_2+b_3D_1 y=b0+b1x1+b2x2+b3D1

步骤:

  1. 数据预处理:导入库–导入数据集–检查缺失数据–数据分类–有必要则设置虚拟变量–特征缩放

## step1: 预处理

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

dataset = pd.read_csv('50_Startups.csv')
X = dataset.iloc[ : , :-1].values
Y = dataset.iloc[ : ,  4 ].values

from sklearn.compose import ColumnTransformer   #new
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder = LabelEncoder()
X[: , 3] = labelencoder.fit_transform(X[ : , 3])

ct = ColumnTransformer([('encoder', OneHotEncoder(), [0])], remainder='passthrough')#new
# 对第四列进行One-Hot编码转为二进制特征,[3]表示对第四列编码,转为数字标签
X = ct.fit_transform(X)#new

# onehotencoder = OneHotEncoder(categorical_features = [3]) #old
# X = onehotencoder.fit_transform(X).toarray()  #old

X = X[: , 1:]  #删除第一列
### 避免虚拟变量陷阱 只选择 两个(3-1)虚拟变量

from sklearn.model_selection import train_test_split    #new
#from sklearn.cross_validation import train_test_split   ## 分割数据集#old
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state = 0)




[github-100天机器学习]day3 multiple linear regression--代码版本问题已修正,ML100day,github,机器学习,线性回归

  1. 在训练集上训练模型:创建训练模型并用fit训练
## step2: 训练

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, Y_train) ## 多重线性回归模型应用到训练集


[github-100天机器学习]day3 multiple linear regression--代码版本问题已修正,ML100day,github,机器学习,线性回归

  1. 预测结果:在测试集预测predict()

## step3: 预测

y_pred = regressor.predict(X_test)


[github-100天机器学习]day3 multiple linear regression--代码版本问题已修正,ML100day,github,机器学习,线性回归

  1. 可视化

## step4:可视化
plt.scatter(np.arange(10),Y_test, color = 'red',label='y_test')
plt.scatter(np.arange(10),y_pred, color = 'blue',label='y_pred')
plt.legend(loc=2)
plt.show()

[github-100天机器学习]day3 multiple linear regression--代码版本问题已修正,ML100day,github,机器学习,线性回归文章来源地址https://www.toymoban.com/news/detail-525371.html

到了这里,关于[github-100天机器学习]day3 multiple linear regression--代码版本问题已修正的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [github-100天机器学习]day1 data preprocessing-版本问题已修正

    https://github.com/LiuChuang0059/100days-ML-code/blob/master/Day1_Data_preprocessing/README.md#step-6-feature-scaling—特征缩放 导入库:numpy包含数学计算函数,pandas用于导入和管理数据集 导入数据集:用pandas的read_csv方法读本地csv为数据帧 处理丢失数据:替换nan值,用sklearn.preprocessing库的Imputer类 解

    2024年02月12日
    浏览(44)
  • Linear Regression in mojo with NDBuffer

    The linear regression is the simplest machine learning algorithm. In this article I will use mojo NDBuffer to implement a simple linear regression algorithm from scratch. I will use NDArray class which was developed by in the previous article. First import the necessary libs and NDArray definition: Let’s assume we want to figure out this function: y = W ⋅

    2024年02月07日
    浏览(60)
  • 【100天精通Python】Day75:Python机器学习-第一个机器学习小项目_鸾尾花分类项目(上)

    目录 1 机器学习中的Helloworld _鸾尾花分类项目 2 导入项目所需类库和鸾尾花数据集 2.1 导入类库 2.2 scikit-learn 库介绍  (1)主要特点: (2)常见的子模块: 3 导入鸾尾花数据集 3.1 概述数据 3.2 数据维度 3.3 查看数据自身 3.4 统计描述数据 3.5 数据分类分布 4 数据可视化 4.1 单

    2024年02月04日
    浏览(53)
  • 红队笔记Day3-->隧道上线不出网机器

    昨天讲了通过代理的形式(端口转发)实现了上线不出网的机器,那么今天就来讲一下如何 通过隧道上线不出网机器      目录 1.网络拓扑 2.开始做隧道?No!!! 3.icmp隧道 4.HTTP隧道 5.SSH隧道 1.什么是ssh隧道 2.ssh隧道:端口转发 3.SSH远程端口转发 4.ssh动态端口转发 今天我

    2024年02月19日
    浏览(41)
  • 【100天精通Python】Day73:python机器学习入门算法详解与代码示例

    目录 1. 监督学习算法: 1.1 线性回归(Linear Regression): 1.2  逻辑回归(Logistic Regression): 1.3 决策树(Decision Tree): 1.4 支持向量机(Support Vector Machine): 1.5 随机森林(Random Forest):  2. 无监督学习算法:  2.1 聚类算法(Clustering): 2.2 主成分分析(PCA): 2.3 K均值聚

    2024年02月05日
    浏览(66)
  • 暑期代码每日一练Day3:874. 模拟行走机器人

    题目 874. 模拟行走机器人 分析 这道题就是个简单的模拟 主要有两点考察点: 对 方向数组 的运用 方向数组存储的是各个方向的单位向量,也即: 方向 X Y 向北 0 1 向东 1 0 向南 0 -1 向西 -1 0 存储在数组中,则是方向数组: 我们很容易发现: 我们可以使用一个变量 j 来指示当

    2024年02月16日
    浏览(47)
  • 机器人应用工程师的入职思考day3

    [1]学习高级弧焊内容,了解机器人在导轨与变位机等设备的配合下进行弧焊的方式 [2]了解专家焊内容,学会如何用两个机器人进行同步焊接 [3]场景应用 1、高级弧焊的运动学相关操作 2、两个或多个机器人之间进行同步焊接的方法 3、之前的疑惑点答疑 周二 2024/4/2 上午9:3

    2024年04月28日
    浏览(39)
  • 【100天精通Python】Day76:Python机器学习-第一个机器学习小项目_鸾尾花分类项目,预测与可视化完整代码(下)

    目录 5 模型实现 5.1 分离出评估数据集 5.2 创建不同的模型来预测新数据 5.3 采用10折交叉验证来评估算法模型 5.4 生成最优模型 6 实施预测 7 模型评估 8 完整代码 (1)鸾尾花分类的完整代码 (2)可视化不同模型预测的评估结果    通过不同的算法来创建模型,并评估它们的

    2024年02月05日
    浏览(58)
  • 微服务学习Day3

    2024年02月20日
    浏览(42)
  • python系统学习Day3

    python函数的参数共有五种类型 参数定义的顺序必须是:必选参数, 默认参数, 可变参数, 命名参数, 参数 理解起来有两种分类方式:普通参照位置的参数/、 / 参数, 固定个数的参数 / 可变参数。 位置参照在前,固定个数在前。 部分类型可指定默认值

    2024年02月19日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包