200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 机器学习:回归分析—— 一元线性回归 多元线性回归的简单实现

机器学习:回归分析—— 一元线性回归 多元线性回归的简单实现

时间:2018-07-09 13:32:32

相关推荐

机器学习:回归分析—— 一元线性回归 多元线性回归的简单实现

回归分析

回归分析概述基本概念可以解决的问题基本步骤和分类线性回归一元线性回归多元线性回归

回归分析概述

基本概念

回归分析是处理多变量间相关关系的一种数学方法。相关关系不同于函数关系,后者反应变量间的严格依存性,而前者则表现出一定程度的波动性或随机性,一个自变量可以对应多个因变量。

回归分析和相关分析往往不加区分,广义上说,相关分析包括回归分析,但严格来说两者又是有区别的。相关分析常用回归分析来补充,两者相辅相成。若通过相关分析显示出变量间关系非常密切,则通过所建立的回归方程可获得相当准确的取值

可以解决的问题

1、建立变量间的数学表达式,通常称为经验公式

2、利用概率统计基础知识进行分析,从而判断所建立的经验公式的有效性

3、进行因素分析,确定影响某一变量的若干变量中,何者为主要, 何者为次要,以及他们之间的关系

基本步骤和分类

1、确定自变量、因变量并进行说明

2、进行回归分析

3、给出因变量和说明变量之间的关系,以公式形式给出

4、预测因变量的未来值

回归分析可以分为线性回归分析和非线性回归分析。

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

非线性回归分析种类比较多,常用的有渐进回归、二次曲线、双曲线、逻辑回归等。

线性回归

一元线性回归

这里实现的是一个房价预测的例子,目的是根据房子的尺寸大小,预测房子的价格。现有数据如下,我们用来预测房屋在700平方英尺的时候预测一下价位。

数据类型:

"""一元线性回归实例房屋面积预测"""#需要的包import matplotlib.pyplot as pltimport pandas as pdfrom 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 = 700result = 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

/Columbia-Intro-Data-Science/python-introduction-caitlinwang/blob/master/www-bcf.usc.edu/~gareth/ISL/Advertising.csv

TV:在电视上投资的广告费

Radio:在广播上投资的广告费

Newapaper:用于报纸媒体的广告费

Sales:对应产品销量

"""多元线性回归"""#需要的包import pandas as pdimport numpy as npfrom sklearn.model_selection import train_test_split#这里推荐的是seaborn包,这个包的数据据可视化效果比较好,#seaborn包也属于Matplotlib的内部包,只是需要单独安装import seaborn as snsimport 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 画两两特征图#/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 = 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)

#绘制ROC曲线import matplotlib.pyplot as pltplt.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曲线也是在机器学习领域经常用到的用来反映拟合效果的图像,是非常重要和常见的统计分析方法,反应的是在几种不同的判定标准下对同一信号刺激所得的结果。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。