import numpy as np
from sklearn import preprocessing
data = np.array([[ 3, -1.5, 2, -5.4],
[ 0, 4, -0.3, 2.1],
[ 1, 3.3, -1.9, -4.3]])
# 去除均值
data_standardized = preprocessing.scale(data)
print( "\nmean =", data_standardized.mean(axis=0))
print( "std deviation =", data_standardized.std(axis=0))
# 將特徵縮放至特定範圍內
data_scaler = preprocessing.minmaxscaler(feature_range=(0, 1))
data_scaled = data_scaler.fit_transform(data)
print( "\nmin max scaled data:\n", data_scaled)
# 歸一化
data_normalized = preprocessing.normalize(data, norm='l1')
print( "\nl1 normalized data:\n", data_normalized)
# 特徵二值化
data_binarized = preprocessing.binarizer(threshold=1.4).transform(data)
print( "\nbinarized data:\n", data_binarized)
# 分類特徵編碼
encoder = preprocessing.onehotencoder()
encoder.fit([[0, 2, 1, 12], [1, 3, 5, 3], [2, 3, 2, 12], [1, 2, 4, 3]])
encoded_vector = encoder.transform([[2, 3, 5, 3]]).toarray()
print( "\nencoded vector:\n", encoded_vector)
2. 將特徵縮放至特定範圍內data_scaler = preprocessing.minmaxscaler(feature_range=(0, 1))
data_scaled = data_scaler.fit_transform(data)
print( "\nmin max scaled data:\n", data_scaled)
### 顯示結果:
min max scaled data:
[[1. 0. 1. 0. ]
[0. 1. 0.41025641 1. ]
[0.33333333 0.87272727 0. 0.14666667]]
可見,處理後資料的特徵值在(0,1)之間。
使用這種縮放的目的包括實現特徵極小方差的魯棒性以及在稀疏矩陣中保留零元素。
3.特徵歸一化
data_normalized = preprocessing.normalize(data, norm='l1')
print( "\nl1 normalized data:\n", data_normalized)
### 結果是:
l1 normalized data:
[[ 0.25210084 -0.12605042 0.16806723 -0.45378151]
[ 0. 0.625 -0.046875 0.328125 ]
[ 0.0952381 0.31428571 -0.18095238 -0.40952381]]
歸一化常見的用法之一,是以「l1正規化」將資料的屬性之和調整成 1。
根據有限的驗算,「l2正規化」與「l1正規化」歸一化的結果不同。
4. 特徵二值化
data_binarized = preprocessing.binarizer(threshold=1.4).transform(data)
print( "\nbinarized data:\n", data_binarized)
### 結果是:
binarized data:
[[1. 0. 1. 0.]
[0. 1. 0. 1.]
[0. 1. 0. 0.]]
如果有這些資料的先驗知識,特徵二值化可以幫助概率估算。
5. 分類特徵編碼
encoder = preprocessing.onehotencoder()
encoder.fit([[0, 2, 1, 12], [1, 3, 5, 3], [2, 3, 2, 12], [1, 2, 4, 3]])
encoded_vector = encoder.transform([[2, 3, 5, 3]]).toarray()
print( "\nencoded vector:\n", encoded_vector)
### 結果是:
encoded vector:
[[0. 0. 1. 0. 1. 0. 0. 0. 1. 1. 0.]]
在機器學習中,特徵經常不是數值型的而是分型別的。舉個例子,乙個人可能有 ["male", "female"] , ["from europe", "from us", "from asia"] , ["uses firefox", "uses chrome", "uses safari", "uses internet explorer"] 等分類的特徵。這些特徵能夠被有效地編碼成整數,比如 ["male", "from us", "uses internet explorer"] 可以被表示為 [0, 1, 3] , ["female", "from asia", "uses chrome"] 表示為 [1, 2, 1] 。
這個整數特徵並不能在scikit-learn的估計器中直接使用,因為這樣的連續輸入,估計器會認為類別之間是有序的,但實際卻是無序的。(例如:瀏覽器的類別資料則是任意排序的)
一種將分類特徵轉換為能夠被scikit-learn中模型使用的編碼是one-of-k或one-hot編碼,在 onehotencoder 中實現。這個類使用 m 個可能值轉換為 m 值化特徵,將分類特徵的每個元素轉化為乙個值。
機器學習筆 常用python庫
python下有很多關於機器學習的庫,最常用的組合有以下四個 numpy 主要用來做一些科 算,主要是矩陣的運算。numpy為python帶來了真正的多維陣列功能,並且提供了豐富的函式庫處理這些陣列。它將常用的數學函式都進行陣列化,使得這些數學函式能夠直接對陣列進行操作,將本來需要在python級別...
Python資料科學手冊(5) 機器學習
python資料科學手冊最後一章講的是機器學習,這是乙個很大的課題,每一種演算法都可以鑽研,遠不是一篇文章能講清楚的,這裡主要總結一下書中關於特徵工程的課題。俗話說,巧婦難為無公尺之炊。在機器學習中,資料和特徵便是 公尺 模型和演算法則是 巧婦 對於乙個機器學習問題,資料和特徵往往決定了結果的上限。...
機器學習之svm專題
svm如何用於回歸分析 手把手教你實現svm 演算法 一 四顆星 lr與svm的異同 支援向量機通俗導論 理解svm的三層境界 1000多個贊。距離度量 支援向量 損失函式 對偶問題 拉格朗日乘法 核函式 軟間隔 1 解決高維特徵的分類問題和回歸問題很有效,在特徵維度大於樣本數時依然有很好的效果。2...