一元回归分析和多元线性回归

  • 前言

    • 在统计学中,回归分析(Regression Analysis)指的是确定两种或两种以上变量间的相互依赖的定量关系的一种分析方法。该方法常使用数据统计的基本原理,对大量统计数据进行数学处理,并确定因变量与某些自变量的相关关系,建立一个相关性较好的回归方程(函数表达式),并加以外推,用于预测以后的因变量的变化的分析方法。
    • 回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。实际上预测分析是回归分析的一种。
    • 之前有说过分类问题,模式分类是通过构造一个分类函数或者分类模型将数据集映射到一个个给定的类别中(这些类别是离散的),它是模式识别的核心研究内容,关系到其识别的整体效率,广泛应用于各个研究领域。而回归问题则是确定两种或者两种以上变量间相互依赖的定量关系的一种统计方法。(这些结果是连续的)。
    • 就结果形式上来看,分类试图得到一个向离散集合的映射,回归试图得到一个向连续集合的映射。
    • 一个简单的回归方程:
      • 用户满意度= 0.008*形象 + 0.645*质量 + 0.221*价格
      • 这个方程说明质量对用户满意度贡献比最大,质量提高1分,满意度提升0.645分,以此类推,形象贡献最小。
      • 使用回归分析得到这个式子,在今后产品上市前,可以根据产品的质量、价格以及形象预测用户对即将上市产品满意度。(这三个特征任意可以计算一个确切的值,即映射到一个连续不断的空间。)
    • 回归分析方法较多,常见如下。
      • 按照涉及变量多少,分为一元回归分析和多元回归分析。
      • 按照因变量的多少,分为简单回归分析和多重回归分析。
      • 按照自变量和因变量之间的关系类型,分为线性回归分析和非线性回归分析。
  • 简介
    • 一元回归分析

      • 对于一组自变量x和对应的一组因变量y的值,x和y呈线性相关关系,现在需要求出满足这个线性关系的直线方程。在数学上一般使用最小二乘法,其主要思想就是找到这样一条直线,使所有已知点到这条直线的距离的和最短,那么理论上这条直线就应该和实际数据拟合度最高。
    • 多元线性回归
      • 上面的一元回归自变量只有一个,在回归分析中如果出现两个以上的自变量,称为多元回归。事实上,一种现象常常与多种因素关联,由多个自变量的最优组合共同来预测或估计因变量,比只用一个自变量进行预测或估计更有效,更符合实际。因此,多元线性回归意义大于一元回归。例如,一个消费水平的关系式中,工资水平、受教育水平、职业、地区、家庭负担等因素都会影响消费水平。
  • 原理
    • 一元回归分析

      • 假设方程为y=a+bxy=a+bx y=a+bx已知很多数据点(x,y),经过最小二乘法,计算出截距项a和斜率b。
      • 回归的目的就是建立一个回归方程来预测目标值,回归的求解就是求这个回归方程的回归系数,如a和b。在回归系数计算出来之后,预测的方法就非常简单了,只需要把输入值代入回归方程即可得到预测值。
    • 多元线性回归
      • 若特征X不止一个,可以构造多元线性回归模型。y=a0+a1x1+a2x2+...y=a_0 + a_1x_1 + a_2x_2 + ... y=a0​+a1​x1​+a2​x2​+...多元线性回归与一元线性回归类似,可以用最小二乘法估计模型参数,也需要对模型及模型参数进行统计检验,计算出a0,a1,a2等参数。这时就可以得到多元回归方程,此时,给出多个自变量,使用回归方程,就可以预测因变量。
    • 回归计算法
      • 步骤

        • 通过对Loss函数求每个参数的偏导。
        • 对所有偏导数,令其为0,解出参数值。
      • 这种方法就是最小二乘法。
      • 对于多元回归,可以使用矩阵进行相关推导,大致思想与一元回归类似,使用最小二乘法。
  • 实战
    • 身高与体重的一元回归

      • 运行结果

    • 身高、年龄与体重的二元回归
      • 运行结果

    • 身高与体重高次回归
      • 运行结果

    • 房价预测
      • 代码

        •   # -*-coding:utf-8-*-import matplotlib.pyplot as pltimport pandas as pdfrom sklearn.linear_model import LinearRegressionimport numpy as np# 输入文件,将房间大小和价格的数据转成scikitlearn中LinearRegression模型识别的数据def get_data(file_name):data = pd.read_csv(file_name)X_parameter = []Y_parameter = []for single_square_meter, single_price_value in zip(data['square_meter'], data['price']):X_parameter.append([float(single_square_meter)])Y_parameter.append([float(single_price_value)])return X_parameter, Y_parameter# 线性分析def line_model_main(X_parameter, Y_parameter, predict_square_meter):# 模型对象regr = LinearRegression()# 训练模型regr.fit(X_parameter, Y_parameter)# 预测数据predict_outcome = regr.predict(predict_square_meter)predictions = {}# 截距值predictions['intercept'] = regr.intercept_# 斜率值predictions['coefficient'] = regr.coef_# 预测值predictions['predict_value'] = predict_outcomereturn predictions# 显示图像def show_linear_line(X_parameter, Y_parameter):# 构造模型对象regr = LinearRegression()# 训练模型regr.fit(X_parameter, Y_parameter)# 绘制已知数据的散点图plt.scatter(X_parameter, Y_parameter, color='blue')# 绘制预测直线plt.plot(X_parameter, regr.predict(X_parameter), color='red', linewidth=4)plt.title('Predict the house price')plt.xlabel('square meter')plt.ylabel('price')plt.show()# 主函数def main():# 读取数据X, Y = get_data('data/house_price.csv')# 获取预测值,这里我们预测700平英尺的房子的房价predict_square_meter = np.array([300, 400]).reshape(-1, 1)result = line_model_main(X, Y, predict_square_meter)for key, value in result.items():print('{0}:{1}'.format(key, value))# 绘图show_linear_line(X, Y)if __name__ == '__main__':main()
      • 运行结果
    • 产品销量与广告多元回归
      • 代码

        •   # -*-coding:utf-8-*-# 导入模块import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom sklearn.linear_model import LinearRegressionfrom sklearn.model_selection import train_test_split# 使用pandas读入数据data = pd.read_csv('data/Advertising.csv')# 转换数据feature_cols = ['TV', 'radio', 'newspaper']X = data[feature_cols]y = data['sales']# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4, random_state=0)# 循环多元回归模型linreg = LinearRegression()model = linreg.fit(X_train, y_train)print(model)print(linreg.intercept_)print(linreg.coef_)# 预测y_pred = linreg.predict(X_test)print(y_pred)# 使用图形来对比预测数据与实际数据之间的关系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()# 模型验证sum_mean = 0for i in range(len(y_pred)):sum_mean += (y_pred[i] - y_test.values[i]) ** 2sum_erro = np.sqrt(sum_mean / 50)print('RMSE by hand:', sum_erro)
      • 运行结果
  • 补充说明
    • 参考书为《Python3数据分析与机器学习实战》,对部分错误修改
    • 具体数据集和代码见我的Github,欢迎Star或者Fork

机器学习-回归之一元回归与多元回归算法原理及实战相关推荐

  1. 机器学习-回归之逻辑回归算法原理及实战

    逻辑回归 简介 在一元回归和多元回归模型中,处理的因变量都是数值型区间变量,建立的模型描述的是因变量的期望与自变量之间的线性关系.然而,在实际的问题分析时,所研究的变量往往不全是区间变量而是顺序变量或 ...

  2. 回归方法--一元回归,多元回归,逐步归回,Logistic 回归

    数学建模专栏 | 第三篇:MATLAB数据建模方法(上) -常用方法 2017-07-21 卓金武 MATLAB 作 者 简 介 卓金武,MathWorks中国高级工程师,教育业务经理,在数据分析.数 ...

  3. (转载)机器学习知识点(十七)Bagging与随机森林算法原理小结

    集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合.本文就对集成学习中Bagging ...

  4. 机器学习-关联之Apriori算法原理及实战

    Apriori算法 前言 关联分析是一种无监督的机器学习方法,主要用于发现大规模数据集中事物之间的依存性和关联性.挖掘数据中隐藏的有价值的关系(如频繁项集.关联规则),有利于对相关事物进行预测,也能帮 ...

  5. 图解机器学习:人人都能懂的算法原理(附链接)

    来源:机器之心 本文约2400字,建议阅读5分钟 本文整理了一篇博客文章的内容,读者可根据这些图理解看似高深的机器学习算法. 标签:机器学习 算法公式挺费神,机器学习太伤人.任何一个刚入门机器学习的人 ...

  6. 【图解机器学习】人人都能懂的算法原理

    简介: 算法公式挺费神,机器学习太伤人.任何一个刚入门机器学习的人都会被复杂的公式和晦涩难懂的术语吓到.但其实,如果有通俗易懂的图解,理解机器学习的原理就会非常容易.本文整理了一篇博客文章的内容,读者 ...

  7. 机器学习-集成之AdaBoost算法原理及实战

    Boosting和AdaBoost 简介 Bagging采用的是一种多个分类器简单评分的方式.而Boosting是和Bagging对应的一种将弱分类器组合成为强分类器的算法框架,它根据分类器学习误差率 ...

  8. 机器学习-集成之随机森林算法原理及实战

    Bagging和随机森林 前言 集成学习是目前机器学习的一大热门方向.简单来说,集成学习就是组合许多弱模型以得到一个预测结果比较好的强模型.对于常见的分类问题就是指采用多个分类器对数据集进行预测,把这 ...

  9. 机器学习-聚类之K均值(K-means)算法原理及实战

    K-means算法 前言 机器学习方法主要分为监督学习和非监督学习两种.监督学习方法是在样本标签类别已知的情况下进行的,可以统计出各类样本的概率分布.特征空间分布区域等描述量,然后利用这些参数进行分类 ...

最新文章

  1. 2022-2028年中国超声波探伤仪行业市场现状调研及发展前景分析报告
  2. asd.equals(s)与s.equals(asd)为什么前者可避免NullPointerException
  3. MySQL--使用innodb_force_recovery修复数据库异常
  4. c# 微服务学习_关于使用“江西微就业”服务平台学习掌握就业创业帮扶政策的通知...
  5. PLSQL查询字段为科学计数法,修正显示
  6. 成交量与股价关系的深度剖析 (一)
  7. jQuery Moblie 页面模版(基础)
  8. boost::filesystem 库的简单使用
  9. [毕业生的商业软件开发之路]解决方案资源管理器
  10. 川崎机器人仿真软件K-ROSET破解版的发展历程
  11. paypal 支付接口开发--Java版
  12. 2017年c语言试题,2017年计算机二级C语言试题
  13. 独立站运营必知:关于聊天机器人的十大好处
  14. 如何正确利用肢体语言表达自己
  15. java 栅栏_Java并发基础-栅栏(CountDownLatch)与闭锁(CyclicBarrier)
  16. Windows 11 找不到文件C:\ProgramData\Package Cache\{xxxx}xxx.exe。请确定文件名是否正确后,再试一次。
  17. 读书笔记:《群论彩图版》
  18. 阿里云ECS简易部署教程
  19. 『深度概念』度量学习中损失函数的学习与深入理解
  20. 视频编辑软件编辑星海外英文网站上线

热门文章

  1. Java中的Object类
  2. IOC和AOP概念理解
  3. virtualbox 硬件加速配置页中已启用硬件虚拟化,但主机并不支持。需要禁用硬件虚拟化才能启动虚拟机
  4. 离散数学知识点总结(7):谓词逻辑(一阶逻辑):个体词、谓词、量词、特性谓词;特性谓词的常用场景
  5. ifix5.8连接ab plc的点-通过igs
  6. YR8015非隔离式AC转DC电源芯片外围简单220V转5V转3.3V无需变压器 适用于小台灯小夜灯 小家电控制板的供电
  7. 2022最新拼多多anti_content加密算法
  8. RoboMaster机器人运行教程(一)
  9. 离心泵CAE_2_ICEM剖分网格_1_进口延伸段
  10. 显卡芯片型号中的GS、GT、LE、GTX、GTS、SE、Pro、XL、XT是什么意思?