机器学习:回归分析—— 一元线性回归、多元线性回归的简单实现
回归分析
- 回归分析概述
- 基本概念
- 可以解决的问题
- 基本步骤和分类
- 线性回归
- 一元线性回归
- 多元线性回归
回归分析概述
基本概念
回归分析是处理多变量间相关关系的一种数学方法。相关关系不同于函数关系,后者反应变量间的严格依存性,而前者则表现出一定程度的波动性或随机性,一个自变量可以对应多个因变量。
回归分析和相关分析往往不加区分,广义上说,相关分析包括回归分析,但严格来说两者又是有区别的。相关分析常用回归分析来补充,两者相辅相成。若通过相关分析显示出变量间关系非常密切,则通过所建立的回归方程可获得相当准确的取值
可以解决的问题
1、建立变量间的数学表达式,通常称为经验公式
2、利用概率统计基础知识进行分析,从而判断所建立的经验公式的有效性
3、进行因素分析,确定影响某一变量的若干变量中,何者为主要, 何者为次要,以及他们之间的关系
基本步骤和分类
1、确定自变量、因变量并进行说明
2、进行回归分析
3、给出因变量和说明变量之间的关系,以公式形式给出
4、预测因变量的未来值
回归分析可以分为线性回归分析和非线性回归分析。
线性回归分析分为一元线性回归和多元线性回归。
非线性回归分析种类比较多,常用的有渐进回归、二次曲线、双曲线、逻辑回归等。
线性回归
一元线性回归
这里实现的是一个房价预测的例子,目的是根据房子的尺寸大小,预测房子的价格。现有数据如下,我们用来预测房屋在700平方英尺的时候预测一下价位。
数据类型:
"""
一元线性回归实例
房屋面积预测
"""#需要的包
import matplotlib.pyplot as plt
import pandas as pd
from sklearn import linear_model#读取数据
def get_data(file_name):data = pd.read_csv(file_name)X_parameter = []Y_parameter = []for single_square_feet,single_price_value in zip(data['square_feet'],data['price']):#遍历数据X_parameter.append([float(single_square_feet)])Y_parameter.append([float(single_price_value)])return X_parameter,Y_parameter#数据拟合,建立线性模型
def linear_model_main(X_parameter,Y_parameter,predict_value):#创建线性回归对象regr = linear_model.LinearRegression()#训练模型regr.fit(X_parameter,Y_parameter)#把要预测的数值放进去训练好的模型进行预测predict_outcome = regr.predict(list([[predict_value]]))#创建一个预测结果的字典predictions = {}#把预测结果加入到字典中#intercept-截距值a;coefficient-系数b;predicted_value-预测结果值predictions['intercept'] = regr.intercept_predictions['coefficient'] = regr.coef_predictions['predicted_value'] = predict_outcomereturn predictions#输入数据,训练模型
X,Y = get_data(r"F:\小组\Python\input_data.csv")
predict_value = 700
result = linear_model_main(X,Y,predict_value)
print("Intercept value:",result['intercept'])
print("Coefficient:",result['coefficient'])
print("Predicted value:",result['predicted_value'])
#显示拟合效果图
def show_linear_line(X_parameter,Y_parameter):#创建线性回归对象regr = linear_model.LinearRegression()regr.fit(X_parameter,Y_parameter)plt.figure()plt.scatter(X_parameter,Y_parameter,color = 'blue')plt.plot(X_parameter,regr.predict(X_parameter),color = 'red',linewidth = 4)plt.xticks(())plt.yticks(())plt.show()show_linear_line(X,Y)
一元线性回归的实现主要是调用sklearn.linear_model里的LinearRegression()函数,拟合用fit()函数,预测用predict()函数,.intercept_截距值a;.coefficient_系数b
多元线性回归
准备数据集Advertising.csv
https://github.com/Columbia-Intro-Data-Science/python-introduction-caitlinwang/blob/master/www-bcf.usc.edu/~gareth/ISL/Advertising.csv
TV:在电视上投资的广告费
Radio:在广播上投资的广告费
Newapaper:用于报纸媒体的广告费
Sales:对应产品销量
"""
多元线性回归
"""#需要的包
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split#这里推荐的是seaborn包,这个包的数据据可视化效果比较好,
#seaborn包也属于Matplotlib的内部包,只是需要单独安装
import seaborn as sns
import matplotlib.pyplot as plt
#用来划分数据集
#from sklearn.cross_validation import train_test_split
#用来构建模型
from sklearn.linear_model import LinearRegression#导入数据
data = pd.read_csv(r"F:\小组\Python\Advertising.csv")
#使用散点图将特征与响应之间的关系可视化出来
#观察单个自变量和因变量之间的相关程度#pairplot 画两两特征图
#http://seaborn.pydata.org/generated/seaborn.pairplot.html#seaborn.pairplot
#size和aspect参数调节显示的大小和比例;kind='reg'添加一条最佳拟合直线和95%的置信带
sns.pairplot(data,x_vars = ['TV','Radio','Newspaper'],y_vars = 'Sales',size = 7,aspect = 0.8,kind = 'reg')
plt.show()
使用pandas构建X(特征向量)和y(标签列)
scihit-learn要求X是一个特征矩阵,y是一个Numpy向量。pandas构建在Numpy之上,因此X可以是pandas的 DataFrame,y可以是pandas的Series
#创建特征列表
feature_cols = ['TV','Radio','Newspaper']
#使用列表选择原始DataFrame的子集
#下面两种返回形式一样
X = data[feature_cols]X = data[['TV','Radio','Newspaper']]
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state = 1)
#构建线性回归模型
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)
print(type(y_pred))
#评估模型
#计算sales预测的RMSE均方根误差
print(type(y_pred),type(y_test))
print(len(y_pred),len(y_test))
print(y_pred.shape,y_test.shape)sum_mean = 0
for 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)
#绘制ROC曲线
import matplotlib.pyplot as plt
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()
多元线性回归模型的构建与简单一元线性回归一样调用的是sklearn.linear_model里的LinearRegression()函数
对于sklearn.model_selection的train_test_split()函数这是经常用到的用来划分训练集与测试集的一种方法,一般模型的建立不只是建立那么简单,还要对预测的效果进行评估,保证其准确率
ROC曲线也是在机器学习领域经常用到的用来反映拟合效果的图像,是非常重要和常见的统计分析方法,反应的是在几种不同的判定标准下对同一信号刺激所得的结果。
机器学习:回归分析—— 一元线性回归、多元线性回归的简单实现相关推荐
- 机器学习(二)多元线性回归算法预测房价
机器学习(二)多元线性回归算法预测房价 本篇文章已作为重庆交通大学19级微课<机器视觉>大作业提交,提前声明,避免抄袭误会 "garbage in garbage out&quo ...
- 多元线性回归分析c语言,多元线性回归公式推导及R语言实现
多元线性回归 多元线性回归模型 实际中有很多问题是一个因变量与多个自变量成线性相关,我们可以用一个多元线性回归方程来表示. 为了方便计算,我们将上式写成矩阵形式: Y = XW 假设自变量维度为N W ...
- 机器学习一百天-day3多元线性回归及虚拟变量陷阱分析
机器学习一百天-day3多元线性回归及虚拟变量陷阱分析 一,数据预处理 导入数据集 import pandas as pd import numpy as npdataset = pd.read_cs ...
- 多重线性回归 多元线性回归_了解多元线性回归
多重线性回归 多元线性回归 Video Link 影片连结 We have taken a look at Simple Linear Regression in Episode 4.1 where ...
- 线性回归-多元线性回归
线性回归-多元线性回归 上次讲到简单线性回归,本文主要讲下如何处理多元线性回归,多元线性回归中如何检查多重共线性,以及如何进行feature selection. 多元线性回归,故名思意,用多个变量来 ...
- 机器学习入门 ————》 一元及多元线性回归
1.线性回归(line Regression) 回归,指研究一组随机变量(Y1 ,Y2 ,-,Yi)和另一组(X1,X2,-,Xk)变量之间关系的统计分析方法,又称多重回归分析.通常Y1,Y2,-,Y ...
- 吴恩达机器学习(二)多元线性回归(假设、代价、梯度、特征缩放、多项式)
目录 0. 前言 1. 假设函数(Hypothesis) 2. 代价函数(Cost Function) 3. 梯度下降(Gradient Descent) 4. 特征缩放(Feature Scalin ...
- 多元线性回归数据集_TensorFlow学习Program1——13.实现一元、多元线性回归(基于房价数据集)...
本节将针对波士顿房价数据集的房间数量(RM)采用简单一元线性回归,目标是预测在最后一列(MEDV)给出的房价.波士顿房价数据集可从http://lib.stat.cmu.edu/datasets/bo ...
- 机器学习代码实现:多元线性回归(梯度下降法)吴恩达课后题目
数据集 数据集如图:(面积,卧室数,价格),来自机器学习吴恩达的课后作业 预测价格 数据集下载:链接: https://pan.baidu.com/s/1MzUq1jPVlic5kkTGsXY87Q? ...
- Python实现机器学习二(实现多元线性回归)
接着上一次的一元线性回归http://blog.csdn.net/lulei1217/article/details/49385531往下讲,这篇文章要讲解的多元线性回归. 1.什么是多元线性回归模型 ...
最新文章
- 批量建立用户和设置密码,批量删除用户脚本
- python不断刷新网页_python使用多线程不断刷新网页的方法
- [Python图像处理] 二十四.图像特效处理之毛玻璃、浮雕和油漆特效
- 页面缓存处理的几种方法
- xp怎样安装android-studio,Xposed 框架的安装
- c#winform演练 ktv项目 制作歌曲播放列表
- 服务器系统性能计数器,MSRS 2008 Windows Service 性能对象的性能计数器
- onCreate onRestoreInstanceState onSaveInstanceState
- linux vim命令_提升生产力的20大Linux Vim命令
- MySQL 千万级数据SQL的查询优化30条总结
- 基于IOS的仿微博系统
- http 报文格式、状态码
- c语言课程火车售票报告,C语言课程设计报告书火车票务管理系统.doc
- Springboot 基于微信小程序的高校学生疫情在校封闭管理系统的设计与实现 毕业设计-附源码240904
- 推荐系统之协同过滤概述
- Meta Reality Labs:理想的VR头显还需克服这10项技术挑战
- buildroot学习(十)——at91sam9g45软件平台更新
- 下雨了,我一个人撑伞
- 小米手机短信定位服务激活失败
- 树形dp——DOVE爱旅游
热门文章
- iphone游戏-钢铁侠2 Iron Man评测
- 毒液:致命守护者HDTC1080清晰英语中字
- 方舟服务器参数文件夹,方舟生存进化私人服务器怎么设置 私人服务器参数调整攻略...
- 获取淘宝商品历史价格信息API(PHP,JAVA都可对接)
- 亚马逊,当之无愧的云计算时代拓荒者
- 人民币贬值如何影响你的生活
- java编译类代码_Java的源代码中定义几个类,编译结果就生成几个以“.class”后缀的字节码。...
- PMP考试常用缩写汇总
- java定义一个方法计算三角形,长方形,圆形面积和周长
- css中white-space的值pre-wrap