首页天道酬勤数学建模多元线性回归模型,数学建模多元回归模型

数学建模多元线性回归模型,数学建模多元回归模型

张世龙 05-13 05:14 65次浏览

多元输出回归模型定义多元输出回归是指在给定输入实例的情况下伴随预测两个或两个以上目标变量的回归问题。

回归是关于预测值的预测建模问题。

例如,预测大小、重量、数量、销售数量、点击数量是回归问题。 通常,如果给定输入变量,则预测单个数字。

在一些回归问题中,需要预测两个以上的数值。 例如,预测x和y坐标。

例1 :通过指定输入预测坐标。 例如,预测x值和y值。

示例2 :多步骤时间序列预测,预测给定变量的多个未来时间序列。

说明许多机器学习算法是为预测单个数值而设计的,简称回归。一些算法确实支持内在的多输出回归,例如线性回归和决策树。还有一些特殊的解决方法,可用于包装和使用那些本来不支持预测多个输出的算法

本文的目的和结构理解如下。

机器学习中的多输出回归问题如何开发本质上支持多输出回归的机器学习模型以及如何开发包装器模型。 允许不支持固有多输出的算法应用于多输出回归问题1.多输出回归问题(1) Scikit-learn版本

)2)多输出回归测试问题

33558www.Sina.com/(1)用于多输出回归的线性回归

)2)多输出回归的k最近邻

)3)多输出回归的随机森林

)4)采用交叉验证评价多输出回归

33558www.Sina.com/(1)每个输出的单独型号(多输出转换器) ) )。

(2)每个输出的链接模型((RegressorChain ) ) ) ) ) ) ) )。

有多种策略处理多个输出回归,本文将讨论其中的几种策略。

2.固有的多输出回归算法首先,验证是否安装了scikit-learn库。

本文中搜索到的一些模型需要库的新版本。

检查sklearn版本importsklearnprint (sk learn._ _ version _ _ )0.23.2 3.包装器多输出回归算法以展示各种建模策略

使用make_regression ()函数创建多输出回归的测试数据集。

生成具有10个输入特性的1,000个样本,其中5个具有冗馀,其馀5个提供有效信息,还包括两个目标变量。

提问输入: 10的数值型特征。 问题输出:两个数值型特征。 # sklearn.datasets的多输出回归测试问题froms klearn.datasetsimportmake _ regression #创建数据集x,然后单击y=make _ regression (n _ sampp random_state=1) #可查看对象shapeprint(x.shape,y.shape ) 1000、2、10 ) 1000

这包括在scikit-learn库中实现的大多数常用机器学习算法。 示例:

线性回归k邻近回归决策树回归随机森林回归1.检查 Scikit-learn 版本# 代码froms klearn.datasetsimportmake _ regressionfromsklearn.linear _ modelimportlinearreeear y=make _ regression (n _ 使用n_targets=2,random_state=1 y ) #模型的预测data _ in=[-2.02220122,0.31563495,0.82797464,- 0.30620401,0.0 -1.444411381 0.76201118 ) yhat=model.predict(data_in ) #预测结果汇总print (yhat ([-93.14714623.26985013 ] 3http://www 制作用于分类时一般采用投票法的froms klearn.datasetsimportmake _ regressionfromsklearn.neighborsimportkneighborsregressor #数据集x y=make_regression

es=10, n_informative=5, n_targets=2, random_state=1)# 定义模型model = KNeighborsRegressor()# 训练模型model.fit(X, y)# 使用模型进行预测data_in = [[-2.02220122, 0.31563495, 0.82797464, -0.30620401, 0.16003707, -1.44411381, 0.87616892, -0.50446586, 0.23009474, 0.76201118]]yhat = model.predict(data_in)# 预测结果的汇总print(yhat) [[-109.74862659 0.38754079]] 3.用于多输出回归的随机森林回归 # 代码示例from sklearn.datasets import make_regressionfrom sklearn.ensemble import RandomForestRegressor# 创建数据X, y = make_regression(n_samples=1000, n_features=10, n_informative=5, n_targets=2, random_state=1)# 定义模型model = RandomForestRegressor()# 训练模型model.fit(X, y)# 使用模型进行预测data_in = [[-2.02220122, 0.31563495, 0.82797464, -0.30620401, 0.16003707, -1.44411381, 0.87616892, -0.50446586, 0.23009474, 0.76201118]]yhat = model.predict(data_in)# 预测结果的汇总print(yhat) [[-69.6710193 23.45282395]] 4.通过交叉验证对多输出回归进行评估 # 使用交叉验证,对多输出回归进行评估# 使用10折交叉验证,且重复三次# 使用MAE作为模型的评估指标from numpy import absolutefrom numpy import meanfrom numpy import stdfrom sklearn.datasets import make_regressionfrom sklearn.tree import DecisionTreeRegressorfrom sklearn.model_selection import cross_val_scorefrom sklearn.model_selection import RepeatedKFold# 创建数据集X, y = make_regression(n_samples=1000, n_features=10, n_informative=5, n_targets=2, random_state=1)# 定义模型model = DecisionTreeRegressor()# 模型评估cv = RepeatedKFold(n_splits=10, n_repeats=3, random_state=1)n_scores = cross_val_score(model, X, y, scoring='neg_mean_absolute_error', cv=cv, n_jobs=-1, error_score='raise')# 结果汇总,结果在两个输出变量之间报告错误,而不是分别为每个输出变量进行单独的错误评分n_scores = absolute(n_scores)print("result:%.3f (%.3f)" %(mean(n_scores), std(n_scores))) result:52.166 (3.180) 4.包装器多输出回归算法

有些回归算法并不直接支持多输出回归,例如SVM。

SVM算法在用于回归的时候,被称为支持向量回归或者SVR。该算法不支持回归问题的多个输出,且会引起错误。

# 使用SVR进行多输出回归from sklearn.datasets import make_regressionfrom sklearn.svm import LinearSVR# 创建数据集X, y = make_regression(n_samples=1000, n_features=10, n_informative=5, n_targets=2, random_state=1)# 定义模型model = LinearSVR()# 训练模型# model.fit(X, y)"""ValueError: y should be a 1d array, got an array of shape (1000, 2) instead.""" '\nValueError: y should be a 1d array, got an array of shape (1000, 2) instead.\n'

为了实现SVR算法用于多输出回归,可以采用如下两种方法

为每个输出创建一个单独的模型;

或者创建一个线性模型序列,其中每个模型的输出取决于先前模型的输出;

1.为每个输出创建单独的模型

这种方法假设:每个输出之间都是相互独立的,但这种假设有时候并不成立。但是这种方法对一系列的问题确实比较有效,其由‘MultiOutputRegressor’类

提供支持,并将一个回归模型作为参数传入。它将为问题中的每个输出创建模型的实例。

# 代码示例from sklearn.datasets import make_regressionfrom sklearn.multioutput import MultiOutputRegressorfrom sklearn.svm import LinearSVR# 创建数据集X, y = make_regression(n_samples=1000, n_features=10, n_informative=5, n_targets=2, random_state=1)# 定义模型model = LinearSVR()# 将创建的模型对象作为参数传入wrapper = MultiOutputRegressor(model)# 训练模型wrapper.fit(X, y)# 使用包装器模型进行预测data_in = [[-2.02220122, 0.31563495, 0.82797464, -0.30620401, 0.16003707, -1.44411381, 0.87616892, -0.50446586, 0.23009474, 0.76201118]]yhat = wrapper.predict(data_in)# 预测结果汇总展示, 基于MultiOutputRegressor分别为每个输出训练了单独的模型print(yhat) [[-93.147146 23.26985013]] 2.为每个输出创建链式模型chained Models

将单输出回归模型用于多输出回归的另一种方法是创建线性模型序列。

第一个模型使用输入并预测得到一个输出;

第二个模型使用输入和第一个模型的输出进行预测;

第三个模型使用输入和前两个模型的输出进行预测;

以此类推;

上述方法可以通过使用sklearn中的RegreessorChain类实现;

上述模型的顺序可以通过‘order’参数进行指定,或者直接基于数据集中输出变量的默认顺序。

例如:order= [0, 1],就表明首先预测编号为0th的输出,然后是1th的输出,相对于order=[1, 0]就反过来了,首先预测最后一个输出变量,然后是第一个。

# 代码示例,使用默认的输出顺序。基于multioutput regression 训练SVRfrom sklearn.datasets import make_regressionfrom sklearn.multioutput import RegressorChainfrom sklearn.svm import LinearSVR# 创建数据集X, y = make_regression(n_samples=1000, n_features=10, n_informative=5, n_targets=2, random_state=1)# 定义模型model = LinearSVR()wrapper = RegressorChain(model)# 训练模型wrapper.fit(X, y)# 使用模型进行预测data_in = [[-2.02220122, 0.31563495, 0.82797464, -0.30620401, 0.16003707, -1.44411381, 0.87616892, -0.50446586, 0.23009474, 0.76201118]]yhat = wrapper.predict(data_in)# 预测结果汇总输出print(yhat) [[-93.147146 23.26968109]]

参考资料链接

代码整理----坚定的鱼----2021年7月。

excel多元回归分析步骤,python做logistic回归分析 以一元线性回归模型为例,简述回归分析的一般步骤