手撸机器学习算法 - 多项式回归
2021/6/17 12:29:59
本文主要是介绍手撸机器学习算法 - 多项式回归,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
系列文章目录:
- 感知机
- 线性回归
- 非线性问题
- 多项式回归
- 岭回归
算法介绍
今天我们来一起学习一个除了线性回归外最最最简单的回归算法:多项式回归;
从线性回归到多项式回归
首先我们一起来学习下多项式回归,事实上与线性回归相比,没有增加任何需要推导的东西,唯一增加的就是对原始数据进行多项式特征转换,这有点类似我们在非线性问题中对特征的处理:将\(x_1\)转换为\(x_1^2\),之前我们是通过对数据的探索来决定如何进行转换,在多项式回归中,则是简单的指定一个阶,然后对所有列构建N元N次的方程中的所有项即可,这么说有点抽象,下面举个简单的例子:
对有两个特征的数据做三阶的多项式特征转换:\(x_1 + x_2\) 转换为 \(x_1^3 + x_2^3 + x_1^2*x_2 + x_2^2*x_1 + x_1^2 + x_2^2 + x_1*x_2 + x_1 + x_2\),可以看到,通过做三阶变换,特征数从两个增长到了九个,多项式特征转换是非常简单且实用的构建特征手段之一,它不仅能构建特征自身的高阶版,同时还能构建特征与特征之间的组合特征,通常效果都不错哦;
代码实现
上面说了,多项式回归与线性回归唯一区别就在多项式特征构建上,因此代码部分也主要关注这一点,关于多项式特征构建,大家既可以基于sklearn库中的方法实现,也可以自己实现,都很简单哈;
sklearn实现多项式特征构建
from sklearn.preprocessing import PolynomialFeatures poly = PolynomialFeatures(degrees) X = poly.fit_transform(X)
自己实现多项式特征构建
def build_combs(self,elements,times): ''' 构建多项式的元组合 elements 元数 times 次数 ''' x_list = sum([[i]*times for i in range(elements)],[]) combs = sum([list(set(combinations(x_list,i))) for i in range(1,times+1)],[]) return [list(comb) for comb in combs] def polynomial(self,x): ''' x shape = [1 N] ''' fun = lambda x,y:x*y return [reduce(fun,x[comb]) for comb in self.combs]
运行结果
全部代码
import numpy as np from itertools import combinations from functools import reduce from 线性回归最小二乘法矩阵实现 import LinearRegression as LR class PolynomialRegression(LR): def __init__(self,X,y,degrees=1): self.combs = self.build_combs(X.shape[1],degrees) X = np.array([self.polynomial(x) for x in X]) super(PolynomialRegression,self).__init__(X,y) def predict(self,x): x = self.polynomial(x) return super(PolynomialRegression,self).predict(x) def build_combs(self,elements,times): ''' 构建多项式的元组合 elements 元数 times 次数 ''' x_list = sum([[i]*times for i in range(elements)],[]) # 二元二次 [1 1 2 2] combs = sum([list(set(combinations(x_list,i))) for i in range(1,times+1)],[]) # 二元二次 [[1 1] [2 2] [1 2] [1] [2]] return [list(comb) for comb in combs] def polynomial(self,x): ''' x shape = [1 N] ''' fun = lambda x,y:x*y return [reduce(fun,x[comb]) for comb in self.combs]
最后
可以看到,实际上多项式回归是非常简单的,实际应用上对于很多简单任务的拟合效果也非常好,解释性也不错;
这篇关于手撸机器学习算法 - 多项式回归的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-17机器学习资料入门指南
- 2024-12-06如何用OpenShift流水线打造高效的机器学习运营体系(MLOps)
- 2024-12-06基于无监督机器学习算法的预测性维护讲解
- 2024-12-03【机器学习(六)】分类和回归任务-LightGBM算法-Sentosa_DSML社区版
- 2024-12-0210个必须使用的机器学习API,为高级分析助力
- 2024-12-01【机器学习(五)】分类和回归任务-AdaBoost算法-Sentosa_DSML社区版
- 2024-11-28【机器学习(四)】分类和回归任务-梯度提升决策树(GBDT)算法-Sentosa_DSML社区版
- 2024-11-26【机器学习(三)】分类和回归任务-随机森林(Random Forest,RF)算法-Sentosa_DSML社区版
- 2024-11-18机器学习与数据分析的区别
- 2024-10-28机器学习资料入门指南