機(jī)器學(xué)習(xí)技術(shù)(四)——特征工程與模型評(píng)估(1??)
??機(jī)器學(xué)習(xí)技術(shù)(四)包含了十二種特征工程的應(yīng)用方法,主要包括標(biāo)準(zhǔn)化,特征縮放,縮放有離群的值的數(shù)據(jù),非線性轉(zhuǎn)換,樣本歸一化,特征二值化,one-hot編碼,缺失值插補(bǔ)以及生成多項(xiàng)式特征等步驟。
??通過(guò)這些步驟可以顯著提高數(shù)據(jù)的質(zhì)量。同時(shí),實(shí)驗(yàn)包含了基于Python代碼的對(duì)特征集進(jìn)行篩選的多種方法。一個(gè)典型的機(jī)器學(xué)習(xí)任務(wù),是通過(guò)樣本的特征來(lái)預(yù)測(cè)樣本所對(duì)應(yīng)的值。而現(xiàn)實(shí)中的情況往往是特征太多了,需要減少一些特征。
??減少特征具有重要的現(xiàn)實(shí)意義,不僅減少過(guò)擬合、減少特征數(shù)量(降維)、提高模型泛化能力,而且還可以使模型獲得更好的解釋性,增強(qiáng)對(duì)特征和特征值之間的理解,加快模型的訓(xùn)練速度,一般的,還會(huì)獲得更好的性能?;趕klearn自帶數(shù)據(jù)集iris,應(yīng)用多種特征篩選方法進(jìn)行特征選擇。
??包含關(guān)于幾個(gè)評(píng)估模型指標(biāo)的參數(shù)計(jì)算及其原理。在日常業(yè)務(wù)有中,當(dāng)我們訓(xùn)練模型時(shí)常常需要在多個(gè)模型中選擇出最優(yōu)模型,因此本實(shí)驗(yàn)中precision, recall rate等參數(shù)就成為評(píng)判的依據(jù),幫助我們選擇和評(píng)價(jià)模型表現(xiàn)。
一、特征工程
在實(shí)際應(yīng)用中,數(shù)據(jù)往往都需要進(jìn)行預(yù)處理,提高數(shù)據(jù)質(zhì)量,也有利于后續(xù)數(shù)據(jù)分析以及挖掘,
主要包括標(biāo)準(zhǔn)化,特征縮放,縮放有離群的值的數(shù)據(jù),非線性轉(zhuǎn)換,樣本歸一化,特征二值化,one-hot編碼,缺失值插補(bǔ)以及生成多項(xiàng)式特征等步驟。通過(guò)這些步驟可以顯著提高數(shù)據(jù)的質(zhì)量?;赑ython代碼的對(duì)特征集進(jìn)行篩選的多種方法
1、標(biāo)準(zhǔn)化
導(dǎo)入相關(guān)庫(kù),并自定義訓(xùn)練集數(shù)據(jù)以及測(cè)試集數(shù)據(jù)
from sklearn import preprocessing
import numpy as np
X_train = np.array([[ 1., -1., -2.],
[ 2., 0., 0.],
[ 3., 1., -1.]])
X_test = [[-1., 1., 0.]]
將每組特征減去均值并除以標(biāo)準(zhǔn)差,使得均值為0,方差為1
#計(jì)算數(shù)據(jù)集的尺度(也就是數(shù)據(jù)集的均值和方差)(各列)
scaler = preprocessing.StandardScaler().fit(X_train) # 計(jì)算均值和方差
print('均值:',scaler.mean_ )
print('方差:',scaler.scale_ )
#通過(guò)尺度去處理另一個(gè)數(shù)據(jù)集,當(dāng)然另一個(gè)數(shù)據(jù)集仍然可以是自己。
X_scaled = scaler.transform(X_train)
print('均值:',X_scaled.mean(axis=0)) # transform會(huì)轉(zhuǎn)化數(shù)據(jù)集為均值為0
print('方差:',X_scaled.std(axis=0)) # transform會(huì)轉(zhuǎn)化數(shù)據(jù)集為方差為1
#上面兩步的綜合:縮放樣本,是樣本均值為0,方差為1(各列)
X_scaled = preprocessing.scale(X_train,axis=0) # 標(biāo)準(zhǔn)化:去均值和方差
print('均值:',X_scaled.mean(axis=0))
print('方差:',X_scaled.std(axis=0))
均值以及方差以及標(biāo)準(zhǔn)化后均值以及方差顯示如下
均值: [ 2. 0. -1.]
方差: [0.81649658 0.81649658 0.81649658]
均值: [0. 0. 0.]
方差: [1. 1. 1.]
均值: [0. 0. 0.]
方差: [1. 1. 1.]
2、特征縮放
計(jì)算樣本和數(shù)據(jù)集中所有已知標(biāo)簽樣本的歐氏距離并排序進(jìn)行投票。
MinMaxScaler將特征縮放至特定范圍內(nèi)(默認(rèn)為0-1)
min_max_scaler = preprocessing.MinMaxScaler()
X_train_minmax = min_max_scaler.fit_transform(X_train) # 訓(xùn)練同時(shí)轉(zhuǎn)換
print('每列最大值:',X_train_minmax.max(axis=0)) # 每列最大值為1
print('每列最小值:',X_train_minmax.min(axis=0)) # 每列最小值為0
X_test_minmax = min_max_scaler.transform(X_test) # 轉(zhuǎn)換實(shí)例應(yīng)用到測(cè)試數(shù)據(jù):實(shí)現(xiàn)和訓(xùn)練數(shù)據(jù)一致的縮放和移位操作:
#MaxAbsScaler通過(guò)除以每個(gè)特征的最大值將訓(xùn)練數(shù)據(jù)特征縮放至 [-1, 1] 范圍內(nèi)??梢詰?yīng)用在稀疏矩陣上保留矩陣的稀疏性。
X_train = np.array([[ 0., -1., 0.],
[ 0., 0., 0.2],
[ 2., 0., 0]])
max_abs_scaler = preprocessing.MaxAbsScaler()
X_train_maxabs = max_abs_scaler.fit_transform(X_train)
print('每列最大值:',X_train_maxabs.max(axis=0)) # 每列最大值為1
print('每列最小值:',X_train_maxabs.min(axis=0)) # 每列最小值不低于-1
print('縮放比例:',max_abs_scaler.scale_)
X_test_maxabs = max_abs_scaler.transform(X_test) # 轉(zhuǎn)換實(shí)例應(yīng)用到測(cè)試數(shù)據(jù):實(shí)現(xiàn)和訓(xùn)練數(shù)據(jù)一致的縮放和移位操作:
print('縮放后的矩陣仍然具有稀疏性:\n',X_train_maxabs)
縮放對(duì)象是記錄了,平移距離和縮放大小,再對(duì)數(shù)據(jù)進(jìn)行的操作
print('先平移:',min_max_scaler.min_)
print('再縮放:',min_max_scaler.scale_)
轉(zhuǎn)換實(shí)例應(yīng)用到測(cè)試數(shù)據(jù):實(shí)現(xiàn)和訓(xùn)練數(shù)據(jù)一致的縮放和移位操作:
MaxAbsScaler
通過(guò)除以每個(gè)特征的最大值將訓(xùn)練數(shù)據(jù)特征縮放至 [-1, 1]
范圍內(nèi)??梢詰?yīng)用在稀疏矩陣上保留矩陣的稀疏性。
X_train = np.array([[ 0., -1., 0.],
[ 0., 0., 0.2],
[ 2., 0., 0]])
max_abs_scaler = preprocessing.MaxAbsScaler()
X_train_maxabs = max_abs_scaler.fit_transform(X_train)
print('每列最大值:',X_train_maxabs.max(axis=0)) # 每列最大值為1
print('每列最小值:',X_train_maxabs.min(axis=0)) # 每列最小值不低于-1
print('縮放比例:',max_abs_scaler.scale_)
X_test_maxabs = max_abs_scaler.transform(X_test) # 轉(zhuǎn)換實(shí)例應(yīng)用到測(cè)試數(shù)據(jù):實(shí)現(xiàn)和訓(xùn)練數(shù)據(jù)一致的縮放和移位操作:
print('縮放后的矩陣仍然具有稀疏性:\n',X_train_maxabs)
輸出為特征縮放的步驟以及縮放后的矩陣
每列最大值: [1. 1. 1.]
每列最小值: [0. 0. 0.]
先平移: [-0.5 0.5 1. ]
再縮放: [0.5 0.5 0.5]
每列最大值: [1. 0. 1.]
每列最小值: [ 0. -1. 0.]
縮放比例: [2. 1. 0.2]
縮放后的矩陣仍然具有稀疏性:
[[ 0. -1. 0.]
[ 0. 0. 1.]
[ 1. 0. 0.]]
3、縮放有離群值的數(shù)據(jù)
根據(jù)百分位數(shù)范圍(默認(rèn)值為IQR:四分位間距)縮放數(shù)據(jù)。
X_train = np.array([[ 1., -11., -2.],
[ 2., 2., 0.],
[ 13., 1., -11.]])
robust_scale = preprocessing.RobustScaler()
X_train_robust = robust_scale.fit_transform(X_train) # 訓(xùn)練同時(shí)轉(zhuǎn)換
print('縮放后的矩陣離群點(diǎn)被處理了:\n',X_train_robust)
輸出:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-548832.html
縮放后的矩陣離群點(diǎn)被處理了:
[[-0.16666667 -1.84615385 0. ]
[ 0. 0.15384615 0.36363636]
[ 1.83333333 0. -1.63636364]]
4、非線性轉(zhuǎn)換
sklearn 將數(shù)據(jù)集映射到均勻分布的方式主要是通過(guò)分位數(shù)轉(zhuǎn)換的方式實(shí)現(xiàn),通過(guò)類(lèi)QuantileTransformer 類(lèi)以及quantile_transform 函數(shù)實(shí)現(xiàn)。
X_train = np.array([[ 1., -1., -2.],
[ 2., 0., 0.],
[ 3., 1., -1.]])
quantile_transformer = preprocessing.QuantileTransformer(n_quantiles=3,random_state=0)
#將數(shù)據(jù)映射到了零到一的均勻分布上(默認(rèn)是均勻分布)
X_train_trans = quantile_transformer.fit_transform(X_train)
#查看分位數(shù)信息,經(jīng)過(guò)轉(zhuǎn)換以后,分位數(shù)的信息基本不變
print('源分位數(shù)情況:',np.percentile(X_train[:, 0], [0, 25, 50, 75, 100]))
print('變換后分位數(shù)情況:',np.percentile(X_train_trans[:, 0], [0, 25, 50, 75, 100]))
#下面將數(shù)據(jù)映射到了零到一的正態(tài)分布上:輸入的中值稱(chēng)為輸出的平均值,并且以0為中心。正常輸出被剪切,使得輸入的最小和最大值分別對(duì)應(yīng)于1e-7和1-1e-7分位數(shù)
quantile_transformer = preprocessing.QuantileTransformer(output_distribution='normal',random_state=0)
輸出:
源分位數(shù)情況: [1. 1.5 2. 2.5 3. ]
變換后分位數(shù)情況: [0. 0.25 0.5 0.75 1. ]
5、樣本歸一化
歸一化 是 縮放單個(gè)樣本以具有單位范數(shù) 的過(guò)程。Normalizer 工具類(lèi)通過(guò)使用 Transformer API實(shí)現(xiàn)了相同的歸一化效果。但和其他轉(zhuǎn)換器不一樣的是,這個(gè)轉(zhuǎn)換器沒(méi)有狀態(tài),其fit函數(shù)并沒(méi)有對(duì)轉(zhuǎn)換保留狀態(tài)的。fit函數(shù)只是對(duì)X進(jìn)行數(shù)組校驗(yàn),可見(jiàn)它并無(wú)狀態(tài),整個(gè)轉(zhuǎn)換的過(guò)程,實(shí)際是全在 transform 函數(shù)。實(shí)際上,該類(lèi)調(diào)用的依舊是normalize 函數(shù)。值得一提的是,Normalizer 工具類(lèi)和 normalize 函數(shù)都支持稀疏矩陣的輸入,并會(huì)自動(dòng)轉(zhuǎn)化為壓縮的稀疏行形式。
使用 l1
或 l2
范式。縮放使每個(gè)樣本(每行)的一范數(shù)或二范數(shù)為1
X = [[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]]
X_normalized = preprocessing.normalize(X, norm='l1') #
print('樣本歸一化:\n',X_normalized)
當(dāng)然仍然可以先通過(guò)樣本獲取轉(zhuǎn)換對(duì)象,再用轉(zhuǎn)換對(duì)象歸一化其他數(shù)據(jù)
normalizer = preprocessing.Normalizer().fit(X) # 獲取轉(zhuǎn)換對(duì)象
normalizer.transform(X) # 轉(zhuǎn)換任何數(shù)據(jù),X或測(cè)試集
輸出為進(jìn)行l(wèi)1范數(shù)歸一化的數(shù)據(jù),以及進(jìn)行l(wèi)2范數(shù)歸一化的數(shù)據(jù)
樣本歸一化:
[[ 0.25 -0.25 0.5 ]
[ 1. 0. 0. ]
[ 0. 0.5 -0.5 ]]
array([[ 0.40824829, -0.40824829, 0.81649658],
[ 1. , 0. , 0. ],
[ 0. , 0.70710678, -0.70710678]])
6、特征二值化
特征二值化 是將數(shù)值特征用閾值過(guò)濾得到布爾值的過(guò)程,可以通過(guò)binarize 函數(shù)實(shí)現(xiàn)
獲取轉(zhuǎn)換模型,生成的門(mén)限,默認(rèn)為0
binarizer = preprocessing.Binarizer().fit(X) #
print(binarizer)
#binarizer = preprocessing.Binarizer(threshold=1)
自定義轉(zhuǎn)換器。門(mén)限以上為1,門(mén)限(包含)以下為0
X_normalized = binarizer.transform(X) # 轉(zhuǎn)換任何數(shù)據(jù),X或測(cè)試集
print('特征二值化:\n',X_normalized)
輸出:
Binarizer(copy=True, threshold=0.0)
特征二值化:
[[1. 0. 1.]
[1. 0. 0.]
[0. 1. 0.]]
7、標(biāo)稱(chēng)特征編碼(one-hot編碼)
獨(dú)熱碼,在英文文獻(xiàn)中稱(chēng)做 one-hot code, 直觀來(lái)說(shuō)就是有多少個(gè)狀態(tài)就有多少比特,而且只有一個(gè)比特為1,其他全為0的一種碼制。舉例如下: 假如有三種顏色特征:紅、黃、藍(lán)
。 在利用機(jī)器學(xué)習(xí)的算法時(shí)一般需要進(jìn)行向量化或者數(shù)字化。那么你可能想令 紅=1,黃=2,藍(lán)=3
. 那么這樣其實(shí)實(shí)現(xiàn)了標(biāo)簽編碼,即給不同類(lèi)別以標(biāo)簽。然而這意味著機(jī)器可能會(huì)學(xué)習(xí)到“紅<黃<藍(lán)”
,但這并不是我們的讓機(jī)器學(xué)習(xí)的本意,只是想讓機(jī)器區(qū)分它們,并無(wú)大小比較之意。所以這時(shí)標(biāo)簽編碼是不夠的,需要進(jìn)一步轉(zhuǎn)換。因?yàn)橛?code>三種顏色狀態(tài),所以就有3個(gè)比特。即紅色:1 0 0 ,黃色: 0 1 0,藍(lán)色:0 0 1
。如此一來(lái)每?jī)蓚€(gè)向量之間的距離都是根號(hào)2,在向量空間距離都相等,所以這樣不會(huì)出現(xiàn)偏序性,基本不會(huì)影響基于向量空間度量算法的效果。
自然狀態(tài)碼為:000,001,010,011,100,101
獨(dú)熱編碼為:000001,000010,000100,001000,010000,100000
以下為例子
輸入:
from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(categories='auto')
enc.fit([[0, 1, 2], # 每列一個(gè)屬性,每個(gè)屬性一種編碼
[1, 0, 0],
[0, 2, 1],
[1, 0, 1]])
print('編碼后:',enc.transform([[0, 1, 1]]).toarray())
轉(zhuǎn)換目標(biāo)對(duì)象。根據(jù)可取值所占位數(shù)進(jìn)行羅列。前2位為第一個(gè)數(shù)字one-hot編碼,緊接著的3位為第二個(gè)數(shù)字的編碼,最后3位為第三個(gè)數(shù)字的編碼
編碼后: [[1. 0. 0. 1. 0. 0. 1. 0.]]
8、缺失值插補(bǔ)
在scikit-learn的模型中都是假設(shè)輸入的數(shù)據(jù)是數(shù)值型的,并且都是有意義的,如果有缺失數(shù)據(jù)是通過(guò)NAN,或者空值表示的話,就無(wú)法識(shí)別與計(jì)算了。要彌補(bǔ)缺失值,可以使用均值,中位數(shù),眾數(shù)等等。Imputer這個(gè)類(lèi)可以實(shí)現(xiàn)。
import numpy as np
from sklearn.impute import SimpleImputer
imp_mean = SimpleImputer(missing_values=np.nan, strategy='mean')
x = [[np.nan, 2], [6, np.nan], [7, 6]]
imp = imp_mean.fit(x)
new_x = imp_mean.transform(x)
print(imp)
print('缺失值插值后:\n',new_x)
輸出:
SimpleImputer(add_indicator=False, copy=True, fill_value=None,
missing_values=nan, strategy='mean', verbose=0)
缺失值插值后:
[[6.5 2. ]
[6. 4. ]
[7. 6. ]]
9、生成多項(xiàng)式特征
有的時(shí)候線性的特征并不能做出美的模型,于是我們會(huì)去嘗試非線性。非線性是建立在將特征進(jìn)行多項(xiàng)式地展開(kāi)上的。比如將兩個(gè)特征
(
X
1
,
X
2
)
(X_1, X_2)
(X1?,X2?)
,它的平方展開(kāi)式便轉(zhuǎn)換成5個(gè)特征
(
1
,
X
1
,
X
2
,
X
1
2
,
X
1
X
2
,
X
2
2
)
.
(1, X_1, X_2, X_1^2, X_1X_2, X_2^2).
(1,X1?,X2?,X12?,X1?X2?,X22?).
from sklearn.preprocessing import PolynomialFeatures
X = np.array([[0, 1],
[2, 3],
[4, 5]])
# 最大二次方。interaction_only參數(shù)設(shè)置為T(mén)rue,則會(huì)只保留交互項(xiàng)
poly = PolynomialFeatures(2,interaction_only=False)
# 從 (X_1, X_2) 轉(zhuǎn)換為 (1, X_1, X_2, X_1^2, X_1X_2, X_2^2)
print('生成多項(xiàng)式:\n',poly.fit_transform(X))
輸出:
生成多項(xiàng)式:
[[ 1. 0. 1. 0. 0. 1.]
[ 1. 2. 3. 4. 6. 9.]
[ 1. 4. 5. 16. 20. 25.]]
10、過(guò)濾法
1、導(dǎo)入數(shù)據(jù)集
我們本實(shí)驗(yàn)中特征數(shù)據(jù)主要是依賴(lài)于sklearn自帶數(shù)據(jù)集iris,對(duì)其進(jìn)行多種方法的特征篩選。所以我們首先導(dǎo)入數(shù)據(jù)集。
#加載數(shù)據(jù)集
from sklearn.datasets import load_iris
iris = load_iris() # 導(dǎo)入IRIS數(shù)據(jù)集
iris.data # 特征矩陣
iris.target # 目標(biāo)向量
2、采用方差過(guò)濾
方差過(guò)濾法需要計(jì)算每個(gè)特征的方差,然后根據(jù)閾值刪除取值小于閾值的特征。
例如,假設(shè)某特征的取值為0和1,且訓(xùn)練集中有90%以上的數(shù)據(jù)在該特征的取值為1,那么可認(rèn)為該特征對(duì)于區(qū)分不同數(shù)據(jù)的作用不大。方差過(guò)濾法只能用于篩選離散的特征,如果特征的取值是連續(xù)的,就需要將連續(xù)值離散化之后才能用。
from sklearn.feature_selection import VarianceThreshold
#方差選擇法,返回值為特征選擇后的數(shù)據(jù)
#參數(shù)threshold為方差的閾值
VarianceThreshold(threshold=3).fit_transform(iris.data)
通過(guò)篩除方差較小的特征數(shù)據(jù),只保留了一個(gè)特征。
優(yōu)點(diǎn):效果最好速度最快,模式單調(diào),快速并且效果明顯。
缺點(diǎn):但是如何參數(shù)設(shè)置, 需要深厚的背景知識(shí)。
3、采用卡方檢驗(yàn)
經(jīng)典的卡方檢驗(yàn)是檢驗(yàn)定性自變量對(duì)定性因變量的相關(guān)性。假設(shè)自變量有N種取值,因變量有M種取值,考慮自變量等于i且因變量等于j的樣本頻數(shù)的觀察值與期望的差距。
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
#選擇K個(gè)最好的特征,返回選擇特征后的數(shù)據(jù)
SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)
通過(guò)卡方檢驗(yàn)只留下兩個(gè)特征值
11、Wrapper
遞歸消除特征法使用一個(gè)基模型來(lái)進(jìn)行多輪訓(xùn)練,每輪訓(xùn)練后,移除若干權(quán)值系數(shù)的特征,再基于新的特征集進(jìn)行下一輪訓(xùn)練。
#遞歸特征消除
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
#遞歸特征消除法,返回特征選擇后的數(shù)據(jù)
#參數(shù)estimator為基模型
#參數(shù)n_features_to_select為選擇的特征個(gè)數(shù)
rfe=RFE(estimator=LogisticRegression(C=1.0, class_weight=None, dual=False,
fit_intercept=True, intercept_scaling=1,
l1_ratio=None, max_iter=1000,
multi_class='auto', n_jobs=None, penalty='l2',
random_state=None, solver='lbfgs', tol=0.0001,
verbose=0, warm_start=False),
n_features_to_select=2, step=1, verbose=0)
rfe.fit_transform(iris.data, iris.target)
上面的代碼中,首先,通過(guò)全部特征利用logistic回歸訓(xùn)練評(píng)估函數(shù)
,得出每個(gè)特征的權(quán)重。然后,將最小權(quán)重的特征從特征集合中去除
。循環(huán)執(zhí)行
以上兩個(gè)過(guò)程,直到特征數(shù)達(dá)成需要。
array([[1.4, 0.2],
[1.4, 0.2],
[1.3, 0.2],
[1.5, 0.2],
[1.4, 0.2],
[1.7, 0.4],
[1.4, 0.3],
[1.5, 0.2],
[1.4, 0.2],
..........
由數(shù)據(jù)可知,遞歸特征消除,只留下了兩個(gè)特征。
12、嵌入法 Embedding
1、基于懲罰項(xiàng)的特征選擇法
#通過(guò)加入L1懲罰項(xiàng),將許多系數(shù)壓縮至0以實(shí)現(xiàn)特征篩選
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression
SelectFromModel(LogisticRegression(penalty="l1", C=0.3,solver='saga',multi_class='multinomial',max_iter=10000)).fit_transform(iris.data, iris.target)
通過(guò)加入L1懲罰項(xiàng),將許多系數(shù)壓縮至0以實(shí)現(xiàn)特征篩選
array([[1.4, 0.2],
[1.4, 0.2],
[1.3, 0.2],
[1.5, 0.2],
[1.4, 0.2],
[1.7, 0.4],
[1.4, 0.3],
[1.5, 0.2],
[1.4, 0.2],
[1.5, 0.1],
..........])
2、基于樹(shù)模型的特征選擇法
樹(shù)模型中GBDT也可用來(lái)作為基模型進(jìn)行特征選擇,使用feature_selection庫(kù)的SelectFromModel類(lèi)結(jié)合GBDT模型
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import GradientBoostingClassifier
#GBDT作為基模型的特征選擇
SelectFromModel(GradientBoostingClassifier()).fit_transform(iris.data, iris.target)
通過(guò)特征選擇只留下2個(gè)特征
輸出:
array([[1.4, 0.2],
[1.4, 0.2],
[1.3, 0.2],
[1.5, 0.2],
[1.4, 0.2],
[1.7, 0.4],
.....)
特征工程總結(jié)
通過(guò)特征工程的一系列代碼,可以了解在面對(duì)不同數(shù)據(jù)集時(shí),先進(jìn)行怎么樣的預(yù)處理來(lái)清洗數(shù)據(jù)提高數(shù)據(jù)質(zhì)量,使得后續(xù)實(shí)驗(yàn)可以事半功倍。特征選擇是數(shù)據(jù)挖掘中非常重要的一步,可以為后續(xù)建模省去很多時(shí)間,提高效率以及模型表現(xiàn)能力。在具體業(yè)務(wù)中,需要根據(jù)場(chǎng)景不同選擇不同的方法。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-548832.html
到了這里,關(guān)于機(jī)器學(xué)習(xí)技術(shù)(四)——特征工程與模型評(píng)估的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!