概述:python
“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已”。线性模型是在统计机器学习中经常使用的模型,
咱们假设解释变量和响应变量的关系是线性的。真实状况未必如此。若是想仿造一段曲线,那么首先应该保证曲线的起始点同样,
其次保证起始点处位移随时间的变化率同样(速度相同),再次应该保证前二者相等的同时关于时间的二阶变化率同样(加速度相同)……
若是随时间每一阶变化率(每一阶导数)都同样,那这俩曲线确定是彻底等价的
(附上怎样更好地理解并记忆泰勒展开式https://www.zhihu.com/questio...)。算法
python sklearn 实现:app
sklearn.preprocessing.PolynomialFeatures(degree=2, interaction_only=False, include_bias=True) 参数说明: degree:多项式次数(就同几元几回方程中的次数同样) interaction_only:是否包含单个自变量**n(n>1)特征数据标识 include_bias:是否包含误差标识 # 首先生成3x2的原始特征矩阵 # 即样本数为3,特征数为2 X = np.arange(6).reshape(3, 2) print '原始数据:' print X # 特生变换/特征生成 # 将原始一阶数据升维到二阶数据 # 升维方式是: [x_1, x_2] 变为 [1, x_1, x_2, x_1^2, x_1 x_2, x_2^2] polyFeat = PolynomialFeatures(degree=2) X_transformed = polyFeat.fit_transform(X) print '特征变换后的数据:' print X_transformed 原始数据: [[0 1] [2 3] [4 5]] 特征变换后的数据: 原始数据: [[0 1] [2 3] [4 5]] 特征变换后的数据: [[ 1. 0. 1. 0. 0. 1.] [ 1. 2. 3. 4. 6. 9.] [ 1. 4. 5. 16. 20. 25.]]
spark ml 实现:机器学习
val data = Array( Vectors.dense(2.0, 1.0), Vectors.dense(0.0, 0.0), Vectors.dense(3.0, -1.0) ) val df = spark.createDataFrame(data.map(Tuple1.apply)).toDF("features") val polyExpansion = new PolynomialExpansion() .setInputCol("features") .setOutputCol("polyFeatures") .setDegree(3) val polyDF = polyExpansion.transform(df)