使用sklearn做單機特徵工程
目錄
1 特徵工程是什麼?
2 資料預處理
2.1 無量綱化
2.1.1 標準化
2.1.2 區間縮放法
2.1.3 標準化與歸一化的區別
2.2 對定量特徵二值化
2.3 對定性特徵啞編碼
2.4 缺失值計算
2.5 資料變換
2.6 回顧
3 特徵選擇
3.1 Filter
3.1.1 方差選擇法
3.1.2 相關係數法
3.1.3 卡方檢驗
3.1.4 互資訊法
3.2 Wrapper
3.2.1 遞迴特徵消除法
3.3 Embedded
3.3.1 基於懲罰項的特徵選擇法
3.3.2 基於樹模型的特徵選擇法
3.4 回顧
4 降維
4.1 主成分分析法(PCA)
4.2 線性判別分析法(LDA)
4.3 回顧
5 總結
6 參考資料
1 特徵工程是什麼?
有這麼一句話在業界廣泛流傳:資料和特徵決定了機器學習的上限,而模型和演算法只是逼近這個上限而已。那特徵工程到底是什麼呢?顧名思義,其本質是一項工程活動,目的是最大限度地從原始資料中提取特徵以供演算法和模型使用。通過總結和歸納,人們認為特徵工程包括以下方面:
特徵處理是特徵工程的核心部分,sklearn提供了較為完整的特徵處理方法,包括資料預處理,特徵選擇,降維等。首次接觸到sklearn,通常會被其豐富且方便的演算法模型庫吸引,但是這裡介紹的特徵處理庫也十分強大!
本文中使用sklearn中的IRIS(鳶尾花)資料集來對特徵處理功能進行說明。IRIS資料集由Fisher在1936年整理,包含4個特徵(Sepal.Length(花萼長度)、Sepal.Width(花萼寬度)、Petal.Length(花瓣長度)、Petal.Width(花瓣寬度)),特徵值都為正浮點數,單位為釐米。目標值為鳶尾花的分類(Iris Setosa(山鳶尾)、Iris Versicolour(雜色鳶尾),Iris Virginica(維吉尼亞鳶尾))。匯入IRIS資料集的程式碼如下:
1 from sklearn.datasets import load_iris 2 3 #匯入IRIS資料集 4 iris = load_iris() 5 6 #特徵矩陣 7 iris.data 8 9 #目標向量 10 iris.target
2 資料預處理
通過特徵提取,我們能得到未經處理的特徵,這時的特徵可能有以下問題:
- 不屬於同一量綱:即特徵的規格不一樣,不能夠放在一起比較。無量綱化可以解決這一問題。
- 資訊冗餘:對於某些定量特徵,其包含的有效資訊為區間劃分,例如學習成績,假若只關心“及格”或不“及格”,那麼需要將定量的考分,轉換成“1”和“0”表示及格和未及格。二值化可以解決這一問題。
- 定性特徵不能直接使用:某些機器學習演算法和模型只能接受定量特徵的輸入,那麼需要將定性特徵轉換為定量特徵。最簡單的方式是為每一種定性值指定一個定量值,但是這種方式過於靈活,增加了調參的工作。通常使用啞編碼的方式將定性特徵轉換為定量特徵:假設有N種定性值,則將這一個特徵擴充套件為N種特徵,當原始特徵值為第i種定性值時,第i個擴充套件特徵賦值為1,其他擴充套件特徵賦值為0。啞編碼的方式相比直接指定的方式,不用增加調參的工作,對於線性模型來說,使用啞編碼後的特徵可達到非線性的效果。
- 存在缺失值:缺失值需要補充。
- 資訊利用率低:不同的機器學習演算法和模型對資料中資訊的利用是不同的,之前提到線上性模型中,使用對定性特徵啞編碼可以達到非線性的效果。類似地,對定量變數多項式化,或者進行其他的轉換,都能達到非線性的效果。
我們使用sklearn中的preproccessing庫來進行資料預處理,可以覆蓋以上問題的解決方案。
2.1 無量綱化
無量綱化使不同規格的資料轉換到同一規格。常見的無量綱化方法有標準化和區間縮放法。標準化的前提是特徵值服從正態分佈,標準化後,其轉換成標準正態分佈。區間縮放法利用了邊界值資訊,將特徵的取值區間縮放到某個特點的範圍,例如[0, 1]等。
2.1.1 標準化
標準化需要計算特徵的均值和標準差,公式表達為:
使用preproccessing庫的StandardScaler類對資料進行標準化的程式碼如下:
1 from sklearn.preprocessing import StandardScaler 2 3 #標準化,返回值為標準化後的資料 4 StandardScaler().fit_transform(iris.data)
2.1.2 區間縮放法
區間縮放法的思路有多種,常見的一種為利用兩個最值進行縮放,公式表達為:
使用preproccessing庫的MinMaxScaler類對資料進行區間縮放的程式碼如下:
1 from sklearn.preprocessing import MinMaxScaler 2 3 #區間縮放,返回值為縮放到[0, 1]區間的資料 4 MinMaxScaler().fit_transform(iris.data)
2.1.3 標準化與歸一化的區別
簡單來說,標準化是依照特徵矩陣的列處理資料,其通過求z-score的方法,將樣本的特徵值轉換到同一量綱下。歸一化是依照特徵矩陣的行處理資料,其目的在於樣本向量在點乘運算或其他核函式計算相似性時,擁有統一的標準,也就是說都轉化為“單位向量”。規則為l2的歸一化公式如下:
使用preproccessing庫的Normalizer類對資料進行歸一化的程式碼如下:
1 from sklearn.preprocessing import Normalizer 2 3 #歸一化,返回值為歸一化後的資料 4 Normalizer().fit_transform(iris.data)
2.2 對定量特徵二值化
定量特徵二值化的核心在於設定一個閾值,大於閾值的賦值為1,小於等於閾值的賦值為0,公式表達如下:
使用preproccessing庫的Binarizer類對資料進行二值化的程式碼如下:
1 from sklearn.preprocessing import Binarizer 2 3 #二值化,閾值設定為3,返回值為二值化後的資料 4 Binarizer(threshold=3).fit_transform(iris.data)
2.3 對定性特徵啞編碼
由於IRIS資料集的特徵皆為定量特徵,故使用其目標值進行啞編碼(實際上是不需要的)。使用preproccessing庫的OneHotEncoder類對資料進行啞編碼的程式碼如下:
1 from sklearn.preprocessing import OneHotEncoder 2 3 #啞編碼,對IRIS資料集的目標值,返回值為啞編碼後的資料 4 OneHotEncoder().fit_transform(iris.target.reshape((-1,1)))
2.4 缺失值計算
由於IRIS資料集沒有缺失值,故對資料集新增一個樣本,4個特徵均賦值為NaN,表示資料缺失。使用preproccessing庫的Imputer類對資料進行缺失值計算的程式碼如下:
1 from numpy import vstack, array, nan 2 from sklearn.preprocessing import Imputer 3 4 #缺失值計算,返回值為計算缺失值後的資料 5 #引數missing_value為缺失值的表示形式,預設為NaN 6 #引數strategy為缺失值填充方式,預設為mean(均值) 7 Imputer().fit_transform(vstack((array([nan, nan, nan, nan]), iris.data)))
2.5 資料變換
常見的資料變換有基於多項式的、基於指數函式的、基於對數函式的。4個特徵,度為2的多項式轉換公式如下:
使用preproccessing庫的PolynomialFeatures類對資料進行多項式轉換的程式碼如下:
1 from sklearn.preprocessing import PolynomialFeatures 2 3 #多項式轉換 4 #引數degree為度,預設值為2 5 PolynomialFeatures().fit_transform(iris.data)
基於單變元函式的資料變換可以使用一個統一的方式完成,使用preproccessing庫的FunctionTransformer對資料進行對數函式轉換的程式碼如下:
1 from numpy import log1p 2 from sklearn.preprocessing import FunctionTransformer 3 4 #自定義轉換函式為對數函式的資料變換 5 #第一個引數是單變元函式 6 FunctionTransformer(log1p).fit_transform(iris.data)
2.6 回顧
類 | 功能 | 說明 |
StandardScaler | 無量綱化 | 標準化,基於特徵矩陣的列,將特徵值轉換至服從標準正態分佈 |
MinMaxScaler | 無量綱化 | 區間縮放,基於最大最小值,將特徵值轉換到[0, 1]區間上 |
Normalizer | 歸一化 | 基於特徵矩陣的行,將樣本向量轉換為“單位向量” |
Binarizer | 二值化 | 基於給定閾值,將定量特徵按閾值劃分 |
OneHotEncoder | 啞編碼 | 將定性資料編碼為定量資料 |
Imputer | 缺失值計算 | 計算缺失值,缺失值可填充為均值等 |
PolynomialFeatures | 多項式資料轉換 | 多項式資料轉換 |
FunctionTransformer | 自定義單元資料轉換 | 使用單變元的函式來轉換資料 |
3 特徵選擇
當資料預處理完成後,我們需要選擇有意義的特徵輸入機器學習的演算法和模型進行訓練。通常來說,從兩個方面考慮來選擇特徵:
- 特徵是否發散:如果一個特徵不發散,例如方差接近於0,也就是說樣本在這個特徵上基本上沒有差異,這個特徵對於樣本的區分並沒有什麼用。
- 特徵與目標的相關性:這點比較顯見,與目標相關性高的特徵,應當優選選擇。除方差法外,本文介紹的其他方法均從相關性考慮。
根據特徵選擇的形式又可以將特徵選擇方法分為3種:
- Filter:過濾法,按照發散性或者相關性對各個特徵進行評分,設定閾值或者待選擇閾值的個數,選擇特徵。
- Wrapper:包裝法,根據目標函式(通常是預測效果評分),每次選擇若干特徵,或者排除若干特徵。
- Embedded:嵌入法,先使用某些機器學習的演算法和模型進行訓練,得到各個特徵的權值係數,根據係數從大到小選擇特徵。類似於Filter方法,但是是通過訓練來確定特徵的優劣。
我們使用sklearn中的feature_selection庫來進行特徵選擇。
3.1 Filter
3.1.1 方差選擇法
使用方差選擇法,先要計算各個特徵的方差,然後根據閾值,選擇方差大於閾值的特徵。使用feature_selection庫的VarianceThreshold類來選擇特徵的程式碼如下:
1 from sklearn.feature_selection import VarianceThreshold 2 3 #方差選擇法,返回值為特徵選擇後的資料 4 #引數threshold為方差的閾值 5 VarianceThreshold(threshold=3).fit_transform(iris.data)
3.1.2 相關係數法
使用相關係數法,先要計算各個特徵對目標值的相關係數以及相關係數的P值。用feature_selection庫的SelectKBest類結合相關係數來選擇特徵的程式碼如下:
1 from sklearn.feature_selection import SelectKBest 2 from scipy.stats import pearsonr 3 4 #選擇K個最好的特徵,返回選擇特徵後的資料 5 #第一個引數為計算評估特徵是否好的函式,該函式輸入特徵矩陣和目標向量,輸出二元組(評分,P值)的陣列,陣列第i項為第i個特徵的評分和P值。在此定義為計算相關係數 6 #引數k為選擇的特徵個數 7 SelectKBest(lambda X, Y: array(map(lambda x:pearsonr(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)
3.1.3 卡方檢驗
經典的卡方檢驗是檢驗定性自變數對定性因變數的相關性。假設自變數有N種取值,因變數有M種取值,考慮自變數等於i且因變數等於j的樣本頻數的觀察值與期望的差距,構建統計量:
這個統計量的含義簡而言之就是自變數對因變數的相關性。用feature_selection庫的SelectKBest類結合卡方檢驗來選擇特徵的程式碼如下:
1 from sklearn.feature_selection import SelectKBest 2 from sklearn.feature_selection import chi2 3 4 #選擇K個最好的特徵,返回選擇特徵後的資料 5 SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)
3.1.4 互資訊法
經典的互資訊也是評價定性自變數對定性因變數的相關性的,互資訊計算公式如下:
為了處理定量資料,最大資訊係數法被提出,使用feature_selection庫的SelectKBest類結合最大資訊係數法來選擇特徵的程式碼如下:
1 from sklearn.feature_selection import SelectKBest 2 from minepy import MINE 3 4 #由於MINE的設計不是函式式的,定義mic方法將其為函式式的,返回一個二元組,二元組的第2項設定成固定的P值0.5 5 def mic(x, y): 6 m = MINE() 7 m.compute_score(x, y) 8 return (m.mic(), 0.5) 9 10 #選擇K個最好的特徵,返回特徵選擇後的資料 11 SelectKBest(lambda X, Y: array(map(lambda x:mic(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)
3.2 Wrapper
3.2.1 遞迴特徵消除法
遞迴消除特徵法使用一個基模型來進行多輪訓練,每輪訓練後,消除若干權值係數的特徵,再基於新的特徵集進行下一輪訓練。使用feature_selection庫的RFE類來選擇特徵的程式碼如下:
1 from sklearn.feature_selection import RFE 2 from sklearn.linear_model import LogisticRegression 3 4 #遞迴特徵消除法,返回特徵選擇後的資料 5 #引數estimator為基模型 6 #引數n_features_to_select為選擇的特徵個數 7 RFE(estimator=LogisticRegression(), n_features_to_select=2).fit_transform(iris.data, iris.target)
3.3 Embedded
3.3.1 基於懲罰項的特徵選擇法
使用帶懲罰項的基模型,除了篩選出特徵外,同時也進行了降維。使用feature_selection庫的SelectFromModel類結合帶L1懲罰項的邏輯迴歸模型,來選擇特徵的程式碼如下:
1 from sklearn.feature_selection import SelectFromModel 2 from sklearn.linear_model import LogisticRegression 3 4 #帶L1懲罰項的邏輯迴歸作為基模型的特徵選擇 5 SelectFromModel(LogisticRegression(penalty="l1", C=0.1)).fit_transform(iris.data, iris.target)
L1懲罰項降維的原理在於保留多個對目標值具有同等相關性的特徵中的一個,所以沒選到的特徵不代表不重要。故,可結合L2懲罰項來優化。具體操作為:若一個特徵在L1中的權值為1,選擇在L2中權值差別不大且在L1中權值為0的特徵構成同類集合,將這一集合中的特徵平分L1中的權值,故需要構建一個新的邏輯迴歸模型:
1 from sklearn.linear_model import LogisticRegression 2 3 class LR(LogisticRegression): 4 def __init__(self, threshold=0.01, dual=False, tol=1e-4, C=1.0, 5 fit_intercept=True, intercept_scaling=1, class_weight=None, 6 random_state=None, solver='liblinear', max_iter=100, 7 multi_class='ovr', verbose=0, warm_start=False, n_jobs=1): 8 9 #權值相近的閾值 10 self.threshold = threshold 11 LogisticRegression.__init__(self, penalty='l1', dual=dual, tol=tol, C=C, 12 fit_intercept=fit_intercept, intercept_scaling=intercept_scaling, class_weight=class_weight, 13 random_state=random_state, solver=solver, max_iter=max_iter, 14 multi_class=multi_class, verbose=verbose, warm_start=warm_start, n_jobs=n_jobs) 15 #使用同樣的引數建立L2邏輯迴歸 16 self.l2 = LogisticRegression(penalty='l2', dual=dual, tol=tol, C=C, fit_intercept=fit_intercept, intercept_scaling=intercept_scaling, class_weight = class_weight, random_state=random_state, solver=solver, max_iter=max_iter, multi_class=multi_class, verbose=verbose, warm_start=warm_start, n_jobs=n_jobs) 17 18 def fit(self, X, y, sample_weight=None): 19 #訓練L1邏輯迴歸 20 super(LR, self).fit(X, y, sample_weight=sample_weight) 21 self.coef_old_ = self.coef_.copy() 22 #訓練L2邏輯迴歸 23 self.l2.fit(X, y, sample_weight=sample_weight) 24 25 cntOfRow, cntOfCol = self.coef_.shape 26 #權值係數矩陣的行數對應目標值的種類數目 27 for i in range(cntOfRow): 28 for j in range(cntOfCol): 29 coef = self.coef_[i][j] 30 #L1邏輯迴歸的權值係數不為0 31 if coef != 0: 32 idx = [j] 33 #對應在L2邏輯迴歸中的權值係數 34 coef1 = self.l2.coef_[i][j] 35 for k in range(cntOfCol): 36 coef2 = self.l2.coef_[i][k] 37 #在L2邏輯迴歸中,權值係數之差小於設定的閾值,且在L1中對應的權值為0 38 if abs(coef1-coef2) < self.threshold and j != k and self.coef_[i][k] == 0: 39 idx.append(k) 40 #計算這一類特徵的權值係數均值 41 mean = coef / len(idx) 42 self.coef_[i][idx] = mean 43 return selfView Code
使用feature_selection庫的SelectFromModel類結合帶L1以及L2懲罰項的邏輯迴歸模型,來選擇特徵的程式碼如下:
1 from sklearn.feature_selection import SelectFromModel 2 3 #帶L1和L2懲罰項的邏輯迴歸作為基模型的特徵選擇 4 #引數threshold為權值係數之差的閾值 5 SelectFromModel(LR(threshold=0.5, C=0.1)).fit_transform(iris.data, iris.target)
3.3.2 基於樹模型的特徵選擇法
樹模型中GBDT也可用來作為基模型進行特徵選擇,使用feature_selection庫的SelectFromModel類結合GBDT模型,來選擇特徵的程式碼如下:
1 from sklearn.feature_selection import SelectFromModel 2 from sklearn.ensemble import GradientBoostingClassifier 3 4 #GBDT作為基模型的特徵選擇 5 SelectFromModel(GradientBoostingClassifier()).fit_transform(iris.data, iris.target)
3.4 回顧
類 | 所屬方式 | 說明 |
VarianceThreshold | Filter | 方差選擇法 |
SelectKBest | Filter | 可選關聯絡數、卡方校驗、最大資訊係數作為得分計算的方法 |
RFE | Wrapper | 遞迴地訓練基模型,將權值係數較小的特徵從特徵集合中消除 |
SelectFromModel | Embedded | 訓練基模型,選擇權值係數較高的特徵 |
4 降維
當特徵選擇完成後,可以直接訓練模型了,但是可能由於特徵矩陣過大,導致計算量大,訓練時間長的問題,因此降低特徵矩陣維度也是必不可少的。常見的降維方法除了以上提到的基於L1懲罰項的模型以外,另外還有主成分分析法(PCA)和線性判別分析(LDA),線性判別分析本身也是一個分類模型。PCA和LDA有很多的相似點,其本質是要將原始的樣本對映到維度更低的樣本空間中,但是PCA和LDA的對映目標不一樣:PCA是為了讓對映後的樣本具有最大的發散性;而LDA是為了讓對映後的樣本有最好的分類效能。所以說PCA是一種無監督的降維方法,而LDA是一種有監督的降維方法。
4.1 主成分分析法(PCA)
使用decomposition庫的PCA類選擇特徵的程式碼如下:
1 from sklearn.decomposition import PCA 2 3 #主成分分析法,返回降維後的資料 4 #引數n_components為主成分數目 5 PCA(n_components=2).fit_transform(iris.data)
4.2 線性判別分析法(LDA)
使用lda庫的LDA類選擇特徵的程式碼如下:
1 from sklearn.lda import LDA 2 3 #線性判別分析法,返回降維後的資料 4 #引數n_components為降維後的維數 5 LDA(n_components=2).fit_transform(iris.data, iris.target)
4.3 回顧
庫 | 類 | 說明 |
decomposition | PCA | 主成分分析法 |
lda | LDA | 線性判別分析法 |
5 總結
再讓我們迴歸一下本文開始的特徵工程的思維導圖,我們可以使用sklearn完成幾乎所有特徵處理的工作,而且不管是資料預處理,還是特徵選擇,抑或降維,它們都是通過某個類的方法fit_transform完成的,fit_transform要不只帶一個引數:特徵矩陣,要不帶兩個引數:特徵矩陣加目標向量。這些難道都是巧合嗎?還是故意設計成這樣?方法fit_transform中有fit這一單詞,它和訓練模型的fit方法有關聯嗎?接下來,我將在《使用sklearn優雅地進行資料探勘》中闡述其中的奧妙!
6 參考資料
相關推薦
使用sklearn做單機特徵工程
目錄 1 特徵工程是什麼?2 資料預處理 2.1 無量綱化 2.1.1 標準化 2.1.2 區間縮放法 2.1.3 標準化與歸一化的區別 2.2 對定量特徵二值化 2.3 對定性特徵啞編碼 2.4 缺失值計算 2.5 資料變換 2.6 回顧3 特徵選擇 3.1 Filter
使用sklearn做單機特征工程
優化 stats 線性模型 向量 border 兩個 lec 處理方法 有效 目錄 1 特征工程是什麽?2 數據預處理 2.1 無量綱化 2.1.1 標準化 2.1.2 區間縮放法 2.1.3 標準化與歸一化的區別 2.2 對定量特征二值化 2.3
使用sklearn做特徵工程
1 特徵工程是什麼? 有這麼一句話在業界廣泛流傳:資料和特徵決定了機器學習的上限,而模型和演算法只是逼近這個上限而已。那特徵工程到底是什麼呢?顧名思義,其本質是一項工程活動,目的是最大限度地從原始資料中提取特徵以供演算法和模型使用。通過總結和歸納,人們認為特徵工程包括以
機器學習實踐(三)—sklearn之特徵工程
一、特徵工程介紹 1. 為什麼需要特徵工程 Andrew Ng : “Coming up with features is difficult, time-consuming, requires expert knowledge. “Applied machine learnin
DataFrameMapper做特徵工程
前言 在資料探勘流程中,特徵工程是極其重要的環節,我們經常要結合實際資料,對某些型別的資料做特定變換,甚至多次變換,除了一些常見的基本變換(參考我之前寫的『資料探勘比賽通用框架』)外,還有很多非主流的奇技淫巧。所以,儘管有sklearn.pipeline這樣的流水線模式
【sklearn例項】4--特徵工程之離散值編碼
離散特徵 離散特徵變數型別可以分為有序類和無序類。 無序類,價值相等且可區分,沒有等級、順序、排序、好壞等邏輯關係,各變數相互獨立:性別(男/女)、顏色(赤橙黃綠青藍紫)、登機口(A/B/C); 有序類:各變數有級別大小等邏輯關係:尺碼(L/XL/XXL)、學歷(高/中/低) 為何要
sklearn學習——特徵工程(特徵選擇)
特徵選擇方法總結 什麼是特徵工程? 定義:特徵工程是將原始資料轉化為特徵,更好表示預測模型處理的實際問題,提升對於未知資料的準確性。它是用目標問題所在的特定領域知識或者自動化的方法來生成、提取、刪減或者組合變化得到特徵。 為什麼要特徵工程? 簡
【資料平臺】sklearn庫特徵工程之特徵選擇和降維
1、特徵選擇 當資料預處理完成後,我們需要選擇有意義的特徵輸入機器學習的演算法和模型進行訓練。通常來說,從兩個方面考慮來選擇特徵: 特徵是否發散:如果一個特徵不發散,例如方差接近於0,也就是說樣本在這個特徵上基本上沒有差異,這個特徵對於樣本的區分並沒有什麼用。特徵與目標的相
【ML--05】第五課 如何做特徵工程和特徵選擇
一、如何做特徵工程? 1.排序特徵:基於7W原始資料,對數值特徵排序,得到1045維排序特徵 2. 離散特徵:將排序特徵區間化(等值區間化、等量區間化),比如採用等量區間化為1-10,得到1045維離散特徵 3. 計數特徵:統計每一行中,離散特徵1-10的
基於IRIS(鳶尾花)資料集使用sklearn的特徵工程練習
【環境】 Python 需要載入sklearn 【IRIS資料集】 由Fisher在1936年整理,包含4個特徵(Sepal.Length(花萼長度)、Sepal.Width(花萼寬度)、Peta
結合sklearn進行特徵工程
1 前言 該篇部落格主要涉及到sklearn.feature_selection 以及其他相關模型,主要介紹瞭如何利用sklearn進行特徵工程,特徵工程在機器學習中佔有工程師的大部分精力,目前也有很多成熟的方法和理論,但是結合實際業務背景選擇特徵仍然是提升模
特徵工程與sklearn
轉自:http://www.cnblogs.com/jasonfreak/p/5448385.html 目錄 1 特徵工程是什麼? 2 資料預處理 2.1 無量綱化 2.1.1 標準化 2.1.2 區間縮放法 2.1.3 標準化與歸一化的區
深度學習如何做特徵工程?
“深度能自動獲取特徵”只是對某些領域而言的。實際上深度學習只是能自動對輸入的低階特徵進行組合、變換,得到高階特徵。對於影象處理之類的領域來說,畫素點就可以作為低階特徵輸入,組合、變換得到的高階特徵也有比較好的效果,所以看似可以自動獲取特徵。 在其他領域的情況就不是這樣了。例如自然語言處理中,輸入的字或詞都是
機器學習系列之特徵工程
資料的特徵選擇 資料特徵主要分為兩部分,一部分是業務已經整理好的各種特徵資料;另一部分是根據業務特徵去構造的資料特徵。 特徵選擇的方法 一、已有特徵 1.過濾法選擇特徵: 方差越小,不同樣本的特徵值越相似,此特徵作用越小; 各個特徵與輸出值間的相關係數,選擇相關係數較大的部分
資料特徵工程之量化裝箱
量化裝箱 假設這樣一個數據集,裡面某些屬性的值差異很大,小的可能是10以內,大至幾百幾千,這樣我們該如何去量化呢?直接將它們送入模型可行嗎? &
機器學習特徵工程總結
一、前言 資料清洗: 不可信的樣本去除 缺失值極多的欄位考慮去除 補齊缺失值 資料取樣:很多情況下,正負樣本是不均衡的,大多數模型對正負樣本是敏感的(比如LR) 正樣本>>負樣本,且量都挺大:下采樣 正樣本>>負
系統學習機器學習之特徵工程(二)--離散型特徵編碼方式:LabelEncoder、one-hot與啞變數*
轉自:https://www.cnblogs.com/lianyingteng/p/7792693.html 在機器學習問題中,我們通過訓練資料集學習得到的其實就是一組模型的引數,然後通過學習得到的引數確定模型的表示,最後用這個模型再去進行我們後續的預測分類等工作。在模型訓練過程中,我們會對訓練
【特徵工程】嘔心之作——深度瞭解特徵工程
文章目錄 一 特徵工程介紹(Feature Engineering) 1 定義及意義 (1)定義 (2)意義 (3)相關概念 1)特徵與屬性的區別? 2)什麼是特徵重要性?
1. 特徵工程之特徵預處理
1. 前言 “資料決定了機器學習的上限,而演算法只是儘可能逼近這個上限”,這裡的資料指的就是經過特徵工程得到的資料。特徵工程指的是把原始資料轉變為模型的訓練資料的過程,它的目的就是獲取更好的訓練資料特徵,使得機器學習模型逼近這個上限。特徵工程能使得模型的效能得到提升,有時甚至在簡單的模型上也能取得不錯的效果
機器學習--特徵工程1--標準化
sklearn.preprocessing https://scikit-learn.org/stable/modules/preprocessing.html 結合sklearn來學習一下資料的預處理過程: 安裝 pip install -U scikit