概述: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)