sklearn基礎及資料處理

kuqlan發表於2019-09-03

   sklearn 庫整合了多種機器學習演算法,可在資料分析過程快速建立模型。透過 pandas 庫雖然已經提供資料合併、清洗、標準化(離差標準化、標準差標準化、小數定標標準化),為構建機器學習模型對資料特徵還需處理更多預處操作,因此 sklearn 將相關預處理功能封裝為統一介面 --- 轉換器( Transformer )。使用 sklearn 轉換器能夠實現對傳入的 NumPy 陣列進行標準化處理、二值化、 PCA 將為等操作。

       說到轉換資料,實際上 padas 庫也有提供了啞變數處理類別資料、離散化連續資料等功能。這也是為什麼僅學 SQL 無法完全替代的 pandas 功能的原因之一。但 sklearn 引入轉換器能夠對訓練集和測試集操作能夠更加方便統一。

       sklearn 也提供了便於學習的經典資料集,這些資料集類似字典方式存放。透過 ancanda中 Spyder 變數介面能夠直觀的看到這些資料及其值。透過這些資料我們也能領會資料分析之前對資料格式最終搞成什麼樣子。例如:資料( data )、標籤( target )、特性( feature )等三個基本要素。後續訓練集和測試的拆分及進行訓練都離不開這些準備資料。

 

1、載入datasats資料集

如果需要載入某個資料集,則可以將對應的函式賦值給某個變數,再次強調資料集三要素:資料(data)、標籤(target)、特性(feature)。如下面程式碼所示:


from sklearn.datasets import load_breast_cancer

cancer = load_breast_cancer()##將資料集賦值給iris變數

print('breast_cancer資料集的長度為:',len(cancer))

print('breast_cancer資料集的型別為:',type(cancer))

 

 


cancer_data = cancer['data']

print('breast_cancer資料集的資料為:','\n',cancer_data)

 

cancer_target = cancer['target'] ## 取出資料集的標籤

print('breast_cancer資料集的標籤為:\n',cancer_target)

 

cancer_names = cancer['feature_names'] ## 取出資料集的特徵名

print('breast_cancer資料集的特徵名為:\n',cancer_names)

 

cancer_desc = cancer['DESCR'] ## 取出資料集的描述資訊

print('breast_cancer資料集的描述資訊為:\n',cancer_desc)

 

2、將資料劃分為訓練集和測試集

資料為什麼要拆分?因為這是機器學習方法創新點。讓計算思維來發掘資料內部的關聯關係。這個方法不像傳統的實驗思維和理論思維。機器學習思路就是根據給定標籤訓練集來找出資料內在規律和關係。

sklearn model_selection 模組提供了 train_test_split 函式,能夠對資料集進行拆分。


print('原始資料集資料的形狀為:',cancer_data.shape)

print('原始資料集標籤的形狀為:',cancer_target.shape)

 

from sklearn.model_selection import train_test_split

cancer_data_train, cancer_data_test,\

cancer_target_train, cancer_target_test = \

train_test_split(cancer_data, cancer_target,

    test_size=0.2, random_state=42)

print('訓練集資料的形狀為:',cancer_data_train.shape)

print('訓練集標籤的形狀為:',cancer_target_train.shape)

print('測試集資料的形狀為:',cancer_data_test.shape)

print('測試集標籤的形狀為:',cancer_target_test.shape)

 

3 、透過 sklearn 轉換器進行資料預處理和降維

為了消除特徵之間量綱和取值範圍差異可能會造成的影響需要對資料進行標準化處理,也叫做規範化處理。實際上規範化就是減少空間複雜度的過程,PCA降維對應於時間複雜度降低過程。

sklearn 的轉換器主要包括 3 個方法: fit transform fit_transform 等。


import numpy as np

from sklearn.preprocessing import MinMaxScaler

Scaler = MinMaxScaler().fit(cancer_data_train) ##生成規則

##將規則應用於訓練集

cancer_trainScaler = Scaler.transform(cancer_data_train)

##將規則應用於測試集

##cancer_testScaler = Scaler.transform(cancer_data_test)

Scaler = MinMaxScaler().fit(cancer_data_test) ##生成規則

cancer_testScaler = Scaler.transform(cancer_data_test)

print('離差標準化前訓練集資料的最小值為:',np.min(cancer_data_train))

print('離差標準化後訓練集資料的最小值為:',np.min(cancer_trainScaler))

print('離差標準化前訓練集資料的最大值為:',np.max(cancer_data_train))

print('離差標準化後訓練集資料的最大值為:',np.max(cancer_trainScaler))

print('離差標準化前測試集資料的最小值為:',np.min(cancer_data_test))

print('離差標準化後測試集資料的最小值為:',np.min(cancer_testScaler))

print('離差標準化前測試集資料的最大值為:',np.max(cancer_data_test))

print('離差標準化後測試集資料的最大值為:',np.max(cancer_testScaler))

 

 

from sklearn.decomposition import PCA

pca_model = PCA(n_components=10).fit(cancer_trainScaler) ##生成規則

cancer_trainPca = pca_model.transform(cancer_trainScaler) ##將規則應用於訓練集

cancer_testPca = pca_model.transform(cancer_testScaler) ##將規則應用於測試集

print('PCA降維前訓練集資料的形狀為:',cancer_trainScaler.shape)

print('PCA降維後訓練集資料的形狀為:',cancer_trainPca.shape)

print('PCA降維前測試集資料的形狀為:',cancer_testScaler.shape)

print('PCA降維後測試集資料的形狀為:',cancer_testPca.shape)

 

 

 

參考書:

Python資料分析與應用  黃紅梅、張良均  主編    中國工信出版集團和人民郵電出版社


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18841027/viewspace-2655854/,如需轉載,請註明出處,否則將追究法律責任。

相關文章