天天看點

python機器學習監督學習-資料預處理相關解釋及操作流程

作者:莫愁4303

資料預處理是機器學習中的重要步驟,它包括對原始資料進行清洗、轉換和內建,以便更好地适應機器學習算法的要求。以下是一些常見的資料預處理技術:

  • 資料清洗:處理缺失值、異常值和重複值,確定資料的完整性和準确性。
  • 特征選擇:選擇對目标變量有顯著影響的特征,以降低模型的複雜度和提高性能。
  • 特征縮放:對特征進行縮放,以確定不同特征之間的數值範圍一緻,常見的方法有标準化和歸一化。
  • 特征轉換:對特征進行轉換,以改善其分布或提取更有意義的資訊。常見的方法有多項式轉換、對數轉換和正态化。
  • 資料內建:将多個資料源的資料進行合并和整合,以便于模組化和分析。
  • 資料降維:通過保留最重要的特征或将高維資料映射到低維空間,以減少模型的複雜性和計算成本。

這些資料預處理技術可以提高模型的準确性和穩定性,并加快模型的訓練和預測速度。在實際應用中,根據具體的資料集和問題,選擇适合的資料預處理方法非常重要。

第1步:導入庫

這兩個是我們每次都需要導入的庫NumPy包含數學計算函數。Pandas用于導入和管理資料集。

import numpy as np
import pandas as pd           

第2步:導入資料集

資料集通常是.csv格式。CSV檔案以文本形式儲存表格資料。檔案的每一行是一條資料記錄我們使用Pandas的read_csv方法讀取本地csv檔案為一個資料幀。然後,從資料幀中制作官變量和因變量的矩陣和向量。

資料集下載下傳位址:

//随後一列是label
dataset = pd.read_csv('Data.csv')//讀取csv檔案
X = dataset.iloc[ : , :-1].values//.iloc[行,列]
Y = dataset.iloc[ : , 3].values  // : 全部行 or 列;[a]第a行 or 列
                                 // [a,b,c]第 a,b,c 行 or 列           

第3步:處理丢失資料

我們得到的資料很少是完整的。資料可能因頭各種原因丢失,為了不降低機器學習模型的性能,需要處理資料。我們可以用整列的平均信或中間值替換丢失的資料。我們用sklearn.pleprocessing庫中的Imputer類完成這項任務。

from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = "NaN", strategy = "mean", axis = 0)
imputer = imputer.fit(X[ : , 1:3])
X[ : , 1:3] = imputer.transform(X[ : , 1:3])           

第4步:解析分類資料

分類資料指的是含有标簽值而不是數字值的變量。取值範圍通常是固定的。例如“Yes”和”No”不能用于模型的數學計算,是以需要解析成數字。為實作這一功能,我們從sklearn.preprocesing庫導入LabelEncoder類。

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])           

建立虛拟變量

onehotencoder = OneHotEncoder(categorical_features = [0])
X = onehotencoder.fit_transform(X).toarray()
labelencoder_Y = LabelEncoder()
Y =  labelencoder_Y.fit_transform(Y)           

第5步:拆分資料集為訓練集合和測試集合

把資料集拆分成兩個:一個是用來訓練模型的訓練集合,另一個是用來驗證模型的測試集合兩者比例一般是80:20。我們導入sklearn.crossvalidation庫中的train_test_split0萬法。

#from sklearn.model_selection import train_test_split
from sklearn.cross_validation import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split( X , Y , test_size = 0.2, random_state = 0)           

第6步:特征量化

大部分模型算法使用兩點間的歐式距離表示但此特征在幅度、機關和範圍姿态問題上變化很大。在距離計算中,高幅度的特征比低幅度特征權重更大。可用特征标準化或Z值歸一化解決。導入sklearn.preprocessing庫的StandardScalar類。

from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)           

代碼:

#Step 1: Importing the libraries
import numpy as np
import pandas as pd

#Step 2: Importing dataset
dataset = pd.read_csv('../datasets/Data.csv')
X = dataset.iloc[ : , :-1].values
Y = dataset.iloc[ : , 3].values
print("Step 2: Importing dataset")
print("X")
print(X)
print("Y")
print(Y)

#Step 3: Handling the missing data
# If you use the newest version of sklearn, use the lines of code commented out
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy="mean")
#from sklearn.preprocessing import Imputer
# axis=0表示按列進行
#imputer = Imputer(missing_values = "NaN", strategy = "mean", axis = 0)
imputer = imputer.fit(X[ : , 1:3])
X[ : , 1:3] = imputer.transform(X[ : , 1:3])
print("---------------------")
print("Step 3: Handling the missing data")
print("step2")
print("X")
print(X)

#Step 4: Encoding categorical data
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.compose import ColumnTransformer 
#labelencoder_X = LabelEncoder()
#X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])
#Creating a dummy variable
#print(X)
ct = ColumnTransformer([("", OneHotEncoder(), [0])], remainder = 'passthrough')
X = ct.fit_transform(X)
#onehotencoder = OneHotEncoder(categorical_features = [0])
#X = onehotencoder.fit_transform(X).toarray()
labelencoder_Y = LabelEncoder()
Y =  labelencoder_Y.fit_transform(Y)
print("---------------------")
print("Step 4: Encoding categorical data")
print("X")
print(X)
print("Y")
print(Y)

#Step 5: Splitting the datasets into training sets and Test sets
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split( X , Y , test_size = 0.2, random_state = 0)
print("---------------------")
print("Step 5: Splitting the datasets into training sets and Test sets")
print("X_train")
print(X_train)
print("X_test")
print(X_test)
print("Y_train")
print(Y_train)
print("Y_test")
print(Y_test)

#Step 6: Feature Scaling
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)
print("---------------------")
print("Step 6: Feature Scaling")
print("X_train")
print(X_train)
print("X_test")
print(X_test)