機器學習演算法無法理解原始資料,所以需對原始資料進行預處理,常用預處理如下:
預處理主要使用了preprocessing包,所以需對該包進行匯入:
importnumpy 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]
])
#將特徵資料的分布調整成標準正太分布,也叫高斯分布,
#也就是使得資料的均值維0,方差為1.標準化是針對每一列而言的
#方法一
data_standardized=preprocessing.scale(data)
print('
mean=
',data_standardized.mean(axis=0))#
特徵均值幾乎為0
print('
std=
',data_standardized.std(axis=0))#
標準差為1
#方法二
scaler=preprocessing.standardscaler().fit(data)
print('
mean=
',scaler.transform(data).mean(axis=0))#
特徵均值幾乎為0
print('
std=
',scaler.transform(data).std(axis=0))#
標準差為1
#為了對付那些標準差相當小的特徵並且保留下稀疏資料中的0值
#方法一:計算公式如下:
#x_std = (x - x.min(axis=0)) / (x.max(axis=0) - x.min(axis=0))
#x_scaled = x_std / (max - min) + min
data_minmax_scaler = preprocessing.minmaxscaler(feature_range=(0, 1))
data_scaled =data_minmax_scaler.fit_transform(data)
print("
min max scaled data:
", data_scaled)
#方法二:特徵中絕對值最大的那個數為1,其他數以此維標準分布在[[-1,1]之間
max_abs_scaler =preprocessing.maxabsscaler()
x_train_maxsbs =max_abs_scaler.fit_transform(data)
print("
max abs scaled data:
", x_train_maxsbs)
#正則化:保證每個特徵向量的值都縮放到相同的數值範圍內,
#提高不同特徵特徵資料的可比性,如資料有許多異常值可使用此方法
#方法一:第二個引數可謂l1與l2,最常用為調整到l1範數,使所有特徵向量之和為1
data_normalized = preprocessing.normalize(data, norm='l1'
)print("
\nl1 normalized data:\n
", data_normalized)
#方法二:
normalizer = preprocessing.normalizer(copy=true, norm='
l2').fit(data)#
建立正則器
normalizer.transform(data)
#將數值型的特徵資料轉換成布林型別的值
#方法一
data_binarized = preprocessing.binarizer(threshold=1.4).transform(data)#
比1.4大的為1,小的為0
print("
\nbinarized data:\n
", data_binarized)
#方法二:
binarizer = preprocessing.binarizer(threshold=0)
print("
\nbinarized data:\n
", binarizer.transform(data))
#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("
encoded vector:
", encoded_vector)
print("
_values_:
", encoder.n_values_)#
值的每個特徵的最大數量。
print("
encoded vector:
", encoder.feature_indices_)
#imp = preprocessing.imputer(missing_values='
nan', axis=0)#
nan可換成其他
imp.fit([[1, 2], [np.nan, 3], [7, 6]])
x = [[np.nan, 2], [6, np.nan], [7, 6]]
print(imp.transform(x))#
填入(1+7)/2和(2+3+6)/3
#生成多項式的特徵,得到高階相互作用特徵
poly = preprocessing.polynomialfeatures(2)#
建立2次方的多項式
print(poly.fit_transform(data))
#定製變壓器:輔助資料清洗或處理
transformer =preprocessing.functiontransformer(np.log1p)
print(transformer.transform(np.array([[0, 1], [2, 3]])))
python機器學習經典例項
資料預處理
現實世界中資料大體上都是不完整,不一致的髒資料,無法直接進行資料探勘,或挖掘結果差強人意。為了提前資料探勘的質量產生了資料預處理技術。資料預處理有多種方法 資料清理,資料整合,資料變換,資料歸約等。這些資料處理技術在資料探勘之前使用,大大提高了資料探勘模式的質量,降低實際挖掘所需要的時間。一 資料清...
資料預處理
常見的資料預處理方法,以下通過sklearn的preprocessing模組來介紹 變換後各維特徵有0均值,單位方差。也叫z score規範化 零均值規範化 計算方式是將特徵值減去均值,除以標準差。sklearn.preprocessing scale x 一般會把train和test集放在一起做標...
資料預處理
用cut函式分箱 有時把數值聚集在一起更有意義。例如,如果我們要為交通狀況 路上的汽車數量 根據時間 分鐘資料 建模。具體的分鐘可能不重要,而時段如 上午 下午 傍晚 夜間 深夜 更有利於 如此建模更直觀,也能避免過度擬合。這裡我們定義乙個簡單的 可復用的函式,輕鬆為任意變數分箱。def binni...