特徵處理之多項式擴展

概述: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)
相關文章
相關標籤/搜索