亚太杯赛题思路发布(中文版)

导读: 本文将继续修炼回归模型算法,并总结了一些常用的除线性回归模型之外的模型,其中包括一些单模型及集成学习器。

保序回归、多项式回归、多输出回归、多输出K近邻回归、决策树回归、多输出决策树回归、AdaBoost回归、梯度提升决策树回归、人工神经网络、随机森林回归、多输出随机森林回归、XGBoost回归。

需要面试或者需要总体了解/复习机器学习回归模型的小伙伴可以通读下本文,理论总结加代码实操,有助于理解模型。

本文所用数据说明:所有模型使用数据为股市数据,与线性回归模型中的数据一样,可以做参考,此处将不重复给出。

保序回归

保序回归或单调回归是一种将自由形式的直线拟合到一系列观测值上的技术,这样拟合的直线在所有地方都是非递减(或非递增)的,并且尽可能靠近观测值。

理论规则是

  • 如果预测输入与训练中的特征值完全匹配,则返回相应标签。如果一个特征值对应多个预测标签值,则返回其中一个,具体是哪一个未指定。
  • 如果预测输入比训练中的特征值都高(或者都低),则相应返回最高特征值或者最低特征值对应标签。如果一个特征值对应多个预测标签值,则相应返回最高值或者最低值。
  • 如果预测输入落入两个特征值之间,则预测将会是一个分段线性函数,其值由两个最近的特征值的预测值计算得到。如果一个特征值对应多个预测标签值,则使用上述两种情况中的处理方式解决。
n = len(dataset['Adj Close'])X = np.array(dataset['Open'].values)y = dataset['Adj Close'].valuesfrom sklearn.isotonic import IsotonicRegressionir=IsotonicRegression()y_ir=ir.fit_transform(X,y)

将拟合过程可视化

红色散点图是原始数据X-y关系图,绿色线为保序回归拟合后的数据X-y_ir关系图。这里以可视化的形式表现了保序回归的理论规则。

lines=[[[i,y[i]],[i,y_ir[i]]] for i in range(n)]lc=LineCollection(lines)plt.figure(figsize=(15,6))plt.plot(X,y,'r.',markersize=12)plt.plot(X,y_ir,'g.-',markersize=12)plt.gca().add_collection(lc)plt.legend(('Data','Isotonic Fit','Linear Fit'))plt.title("Isotonic Regression")plt.show(

多项式回归

多项式回归(PolynomialFeatures)是一种用多项式函数作为自变量的非线性方程的回归方法。

将数据转换为多项式。多项式回归是一般线性回归模型的特殊情况。它对于描述曲线关系很有用。曲线关系可以通过平方或设置预测变量的高阶项来实现。

sklearn中的多项式拟合

X = dataset.iloc[ : , 0:4].valuesY = dataset.iloc[ : ,  4].valuesfrom sklearn.preprocessing import PolynomialFeaturesfrom sklearn.linear_model import LinearRegressionpoly=PolynomialFeatures(degree=3)poly_x=poly.fit_transform(X)regressor=LinearRegression()regressor.fit(poly_x,Y)plt.scatter(X,Y,color='red')plt.plot(X,regressor.predict(poly.fit_transform(X)),color='blue')plt.show()

以原始数据绘制X-Y红色散点图,并绘制蓝色的、经过多项式拟合后再进行线性回归模型拟合的直线图。

一元自变量计算三阶多项式
from scipy import *f = np.polyfit(X,Y,3)p = np.poly1d(f)print(p)
            3            2-6.228e-05x + 0.0023x + 0.9766x + 0.05357
多元自变量的多项式
from sklearn.preprocessing import PolynomialFeaturesfrom sklearn import linear_modelX = np.array(dataset[['Open''High''Low']].values)Y = np.array(dataset['Adj Close'].values)Y = Y.reshape(Y.shape[0], -1)poly = PolynomialFeatures(degree=3)X_ = poly.fit_transform(X)predict_ = poly.fit_transform(Y)
Pipeline形式
from sklearn.pipeline import PipelineX = np.array(dataset['Open'].values)Y = np.array(dataset['Adj Close'].values)X = X.reshape(X.shape[0], -1)Y = Y.reshape(Y.shape[0], -1)Input=[('scale',StandardScaler()),('polynomial', PolynomialFeatures(include_bias=False)),('model',LinearRegression())]pipe = Pipeline(Input)pipe.fit(X,Y)yhat = pipe.predict(X)yhat[0:4]
array([[3.87445269],[3.95484371],[4.00508501],[4.13570206]])

numpy 中的多项式拟合

首先理解nump用于多项式拟合的两个主要方法。

np.poly1d
np.poly1d(c_or_r, r=False, variable=None)

一维多项式类,用于封装多项式上的"自然"操作,以便上述操作可以在代码中采用惯用形式。如何理解呢?看看下面几个例子。

  • c_or_r系数向量
import numpy as npa=np.array([2,1,1])f=np.poly1d(a)print(f)
  22 x + 1 x + 1
  • r=False是否反推

表示把数组中的值作为根,然后反推多项式。

f=np.poly1d([2,3,5],r=True)#(x - 2)*(x - 3)*(x - 5)  = x^3 - 10x^2 + 31x -30

print(f)
   3      21 x - 10 x + 31 x - 30
  • variable=None表示改变未知数的字母
f=np.poly1d([2,3,5],r=True,variable='z')print(f)
   3      21 z - 10 z + 31 z - 30
np.polyfit
np.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)

最小二乘多项式拟合。

拟合多项式。返回一个系数'p'的向量,以最小化平方误差的顺序'deg','deg-1',…"0"

推荐使用 <numpy.polynomial.polynomial.Polynomial.fit> 类方法,因为它在数值上更稳定。

下图是以原始数据绘制的蓝色X-Y散点图,以及红色的X分布图。

X = dataset['Open'].valuesy = dataset['Adj Close'].valuesfrom sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25)plt.figure(figsize=(10,6))plt.plot(X_train, y_train, 'bo')plt.plot(X_test, np.zeros_like(X_test), 'r+')plt.show()
numpy与sklearn中的多项式回归对比
# numpy

model_one = np.poly1d(np.polyfit(X_train, y_train,1))preds_one = model_one(X_test)print(preds_one[:3])>>> [11.59609048 10.16018804 25.23716889]# sklearn

from sklearn.linear_model import LinearRegressionmodel = LinearRegression()model.fit(X_train.reshape(-11), y_train)preds = model.predict(X_test.reshape(-11))preds[:3]>>> array([11.5960904810.1601880425.23716889])预测结果是一样的

print("all close?", np.allclose(preds, preds_one))>>> 'all close? True

结果表明两者相比预测结果时一致的。

多阶多项式效果对比

比较一阶、二阶及三阶多项式拟合,多线性回归模型的效果影响。由图可看出,三条线基本重合,且RMSE相差不大。

model_one = np.poly1d(np.polyfit(X_train, y_train,1))model_two = np.poly1d(np.polyfit(X_train, y_train, 2))model_three = np.poly1d(np.polyfit(X_train, y_train, 3))fig, axes = plt.subplots(12, figsize=(145),sharey=True)labels = ['line''parabola''nonic']models = [model_one, model_two, model_three]train = (X_train, y_train)test = (X_test, y_test)for ax, (ftr, tgt) in zip(axes, [train, test]):ax.plot(ftr, tgt, 'k+')num = 0
for m, lbl in zip(models, labels):ftr = sorted(ftr)ax.plot(ftr, m(ftr), '-', label=lbl)if ax == axes[1]:ax.text(2,55-num, f"{lbl}_RMSE: {round(np.sqrt(mse(tgt, m(tgt))),3)}")num += 5

axes[1].set_ylim(-1060)axes[0].set_title("Train")axes[1].set_title("Test");axes[0].legend(loc='best');
绘制类似学习曲线

因低阶多项式效果相差并不明显,因此增大多项式阶数,并以残差平方和为y轴,看模型拟合效果,由图可以看出,随着多项式阶数越来越高,模型出现严重的过拟合(训练集残差平方和降低,而测试集却在上涨)。

results = []for complexity in [123456,7,89]:model = np.poly1d(np.polyfit(X_train, y_train, complexity))train_error = np.sqrt(mse(y_train, model(X_train)))test_error = np.sqrt(mse(y_test,model(X_test)))results.append((complexity, train_error, test_error))columns = ["Complexity""Train Error""Test Error"]results_df = pd.DataFrame.from_records(results, columns=columns,index="Complexity")results_dfresults_df.plot(figsize=(10,6))

多输出回归

多输出回归为每个样本分配一组目标值。这可以认为是预测每一个样本的多个属性,比如说一个具体地点的风的方向和大小。

多输出回归支持 MultiOutputRegressor 可以被添加到任何回归器中。这个策略包括对每个目标拟合一个回归器。因为每一个目标可以被一个回归器精确地表示,通过检查对应的回归器,可以获取关于目标的信息。因为 MultiOutputRegressor 对于每一个目标可以训练出一个回归器,所以它无法利用目标之间的相关度信息。

支持多类-多输出分类的分类器:

sklearn.tree.DecisionTreeClassifier sklearn.tree.ExtraTreeClassifier  sklearn.ensemble.ExtraTreesClassifier  sklearn.neighbors.KNeighborsClassifiersklearn.neighbors.RadiusNeighborsClassifiersklearn.ensemble.RandomForestClassifier
X = dataset.drop(['Adj Close''Open'], axis=1)Y = dataset[['Adj Close''Open']]from sklearn.multioutput import MultiOutputRegressorfrom sklearn.svm import LinearSVRmodel = LinearSVR()wrapper = MultiOutputRegressor(model)wrapper.fit(X, Y)data_in = [[23.9822.917.007.001.621.624.274.25]]yhat = wrapper.predict(data_in)print(yhat[0])>>> [16.72625136 16.72625136]wrapper.score(X, Y)

多输出K近邻回归

多输出K近邻回归可以不使用MultiOutputRegressor作为外包装器,直接使用KNeighborsRegressor便可以实现多输出回归。

X = dataset.drop(['Adj Close''Open'], axis=1)Y = dataset[['Adj Close''Open']]from sklearn.neighbors import KNeighborsRegressormodel = KNeighborsRegressor()model.fit(X, Y)data_in = [[23.9822.917.007.001.621.624.274.25]]yhat = model.predict(data_in)print(yhat[0])>>> [2.34400001 2.352     ]model.score(X, Y)>>> 0.7053689393640217

决策树回归

决策树是一种树状结构,她的每一个叶子结点对应着一个分类,非叶子结点对应着在某个属性上的划分,根据样本在该属性上的不同取值降气划分成若干个子集。

基本原理

数模型通过递归切割的方法来寻找最佳分类标准,进而最终形成规则。CATA树,对回归树用平方误差最小化准则,进行特征选择,生成二叉树。

CATA回归树的生成

在训练数据集所在的空间中,递归地将每个空间区域划分为两个子区域,并决定每个子区域上的输出值,生产二叉树。

选择最优切分变量  和最优切分点  ,求解

遍历  ,对固定的切分变量  扫描切分点  ,使得上式达到最小值的对  ,不断循环直至满足条件停止。

X = dataset.drop(['Adj Close''Close'], axis=1)  y = dataset['Adj Close'划分训练集和测试集略 

模型实例化

from sklearn.tree import DecisionTreeRegressor  regressor = DecisionTreeRegressor()  训练模型

regressor.fit(X_train, y_train)回归预测

y_pred = regressor.predict(X_test)df = pd.DataFrame({'Actual':y_test, 'Predicted':y_pred})  print(df.head(2))
            Actual  PredictedDate                         2017-08-09   12.83      12.632017-11-14   11.12      11.20

模型评价

from sklearn import metrics 平均绝对误差

print(metrics.mean_absolute_error(y_test, y_pred))  均方差

print(metrics.mean_squared_error(y_test, y_pred))均方根误差

print(np.sqrt(metrics.mean_squared_error(y_test, y_pred)))
0.09246808936170.02269660102120.1506539114039

交叉验证

from sklearn.model_selection import cross_val_scoredt_fit = regressor.fit(X_train, y_train)dt_scores = cross_val_score(dt_fit, X_train, y_train, cv = 5)print("Mean cross validation score: {}".format(np.mean(dt_scores)))print("Score without cv: {}".format(dt_fit.score(X_train, y_train)))
Mean cross validation score: 0.99824909037Score without cv: 1.0

R2

from sklearn.metrics import r2_scoreprint('r2 score:', r2_score(y_test, dt_fit.predict(X_test)))print('Accuracy Score:', dt_fit.score(X_test, y_test))
r2 score: 0.9989593390532074Accuracy Score: 0.9989593390532074

aa4e9d52239f4bf9b3401d87c2955efe.jpg

亚太杯赛题思路发布(中文版)icon-default.png?t=N7T8https://mbd.pub/o/bread/ZpeZm5dp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/37412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UI(三)布局

文章目录 1、Colum和Row——垂直方向容器和水平方向容器2、ColumnSplit和RowSplit——子组件之间插入一条分割线3、Flex——弹性布局子组件的容器4、Grid和GridItem——网格容器和网格容器单元格5、GridRow和GridCol——栅格容器组件和栅格子组件6、List、ListItem、ListItemGr…

力扣每日一题 6/28 动态规划/数组

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 2742.给墙壁刷油漆【困难】 题目&#xff1a; 给你两个长度为 n 下标从 0…

密码学及其应用 —— 非对称加密/公匙密码技术

1 RSA加密算法 RSA加密算法是一种基于公钥密码学的加密技术&#xff0c;由罗纳德里维斯特&#xff08;Ron Rivest&#xff09;、阿迪萨莫尔&#xff08;Adi Shamir&#xff09;和伦纳德阿德曼&#xff08;Leonard Adleman&#xff09;在1977年共同发明。RSA算法是第一个既能用于…

C++ sizeof的各种

C sizeof的各种 1. 含有虚函数的类对象的空间大小2. 虚拟继承的类对象的空间大小3. 普通变量所占空间大小4. 复合数据类型&#xff08;结构体和类&#xff09;5. 数组6. 类型别名7. 动态分配内存8. 指针9. 静态变量10. 联合体11. 结构体使用#program pack 1. 含有虚函数的类对象…

RuoYi_Cloud本地搭建

1.进入若依官网获取git地址 &#xff08;1&#xff09;百度搜“若依官网进”入如下界面 &#xff08;2&#xff09;点击进入git&#xff0c;点克隆下载 &#xff08;3&#xff09;复制http地址 2.在git链接在idea本地打开 &#xff08;1&#xff09;返回桌面——右键&#xf…

金属波纹管

金属波纹管是一种外型规则的波浪样的管材&#xff0c;常用的金属波纹管有碳钢的&#xff0c;和不锈钢的&#xff0c;也有钢质衬塑的、铝质的等等。这种管材主要用于需要很小的弯曲半径非同心轴向传动&#xff0c;或者不规则转弯、伸缩&#xff0c;或者吸收管道的热变形等&#…

数据结构历年考研真题对应知识点(数组和特殊矩阵)

目录 3.4数组和特殊矩阵 3.4.2数组的存储结构 【二维数组按行优先存储的下标对应关系(2021)】 3.4.3特殊矩阵的压缩存储 【对称矩阵压缩存储的下标对应关系(2018、2020)】 【上三角矩阵采用行优先存储的应用(2011)】 【三对角矩阵压缩存储的下标对应关系(2016)】 3.4.…

为什么有的手机卡没有语音功能呢?

大家好&#xff0c;今天这篇文章为大家介绍一下&#xff0c;无通话功能的手机卡&#xff0c; 在网上申请过手机卡的朋友应该都知道&#xff0c;现在有这么一种手机卡&#xff0c;虽然是运营商推出的正规号卡&#xff0c;但是却屏蔽了通话功能&#xff0c;你知道这是为什么吗&am…

自组装mid360便捷化bag包采集设备

一、问题一&#xff1a;电脑太重&#xff0c;换nuc 采集mid360数据的过程中&#xff0c;发现了头疼的问题&#xff0c;得一手拿着电脑&#xff0c;一手拿着mid360来采集&#xff0c;实在是累胳膊。因此&#xff0c;网购了一个intel nuc, 具体型号是12wshi5000华尔街峡谷nuc12i…

二刷算法训练营Day45 | 动态规划(7/17)

目录 详细布置&#xff1a; 1. 139. 单词拆分 2. 多重背包理论基础 3. 背包总结 3.1 背包递推公式 3.2 遍历顺序 01背包 完全背包 详细布置&#xff1a; 1. 139. 单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单…

昇思25天学习打卡营第6天|linchenfengxue

​​​​​​SSD目标检测 SSD&#xff0c;全称Single Shot MultiBox Detector&#xff0c;是Wei Liu在ECCV 2016上提出的一种目标检测算法。使用Nvidia Titan X在VOC 2007测试集上&#xff0c;SSD对于输入尺寸300x300的网络&#xff0c;达到74.3%mAP(mean Average Precision)以…

nginx架构基本数据结构配置模块请求详解

nginx源码的目录结构&#xff1a; . ├── auto 自动检测系统环境以及编译相关的脚本 │ ├── cc 关于编译器相关的编译选项的检测脚本 │ ├── lib nginx编译所需要的一些库的检测脚本 │ ├── os 与平台相关的一些系统参…

端口扫描攻击检测及防御方案

端口扫描数据一旦落入坏人之手&#xff0c;可能会成为更大规模恶意活动的一部分。因此&#xff0c;了解如何检测和防御端口扫描攻击至关重要。 端口扫描用于确定网络上的端口是否开放以接收来自其他设备的数据包&#xff0c;这有助于网络安全团队加强防御。但恶意行为者也可以…

zabbix-server的搭建

zabbix-server的搭建 部署 zabbix 服务端(192.168.99.180) rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm cd /etc/yum.repos.d sed -i s#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix# zabbix.r…

实验八 T_SQL编程

题目 以电子商务系统数据库ecommerce为例 1、在ecommerce数据库&#xff0c;针对会员表member首先创建一个“呼和浩特地区”会员的视图view_hohhot&#xff0c;然后通过该视图查询来自“呼和浩特”地区的会员信息&#xff0c;用批处理命令语句将问题进行分割&#xff0c;并分…

【方案+源码】srm供应商招投标管理系统建设方案及源码实现

SRM供应商管理系统功能建设涵盖&#xff1a; 供应商管理&#xff1a;整合供应商信息&#xff0c;实现全生命周期管理。 采购需求管理&#xff1a;精准把握采购需求&#xff0c;优化采购计划。 采购寻源管理&#xff1a;智能寻源&#xff0c;匹配最佳供应商。 采购合同管理&…

spring和springboot的关系是什么?

大家好&#xff0c;我是网创有方的站长&#xff0c;今天给大家分享下spring和springboot的关系是什么&#xff1f; Spring和Spring Boot之间的关系可以归纳为以下几个方面&#xff1a; 技术基础和核心特性&#xff1a; Spring&#xff1a;是一个广泛应用的开源Java框架&#…

计算机类主题会议推荐之——AIIIP 2024

【ACM出版 |IEEE&ACM院士、CCF杰出会员担任组委| 往届会后4个月检索 】 第三届人工智能与智能信息处理国际学术会议&#xff08;AIIIP 2024&#xff09; 2024 3rd International Conference on Artificial Intelligence and Intelligent Information Processing 中国-天…

uniapp部署服务器,uniapp打包H5部署服务器,uniapp将config.js抽离

目录 步骤一.在static文件夹下新建config.js文件 config.js文件说明 在config.js中放入使用的请求的接口地址,资源路径等 congfig.js中的变量在页面中如何使用 步骤二.manifest.json配置 1.在项目根目录(与app.vue同级)创建template.h5.html文件 2.在manifest.json配置刚刚创…

全面体验ONLYOFFICE 8.1版本桌面编辑器

ONLYOFFICE官网 在当今的数字化办公环境中&#xff0c;选择合适的文档处理工具对于提升工作效率和团队协作至关重要。ONLYOFFICE 8.1版本桌面编辑器&#xff0c;作为一款集成了多项先进功能的办公软件&#xff0c;为用户提供了全新的办公体验。今天&#xff0c;我们将深入探索…