問題定義與理解:
明確機(jī)器學(xué)習(xí)任務(wù)的目標(biāo),是分類、回歸、聚類、強(qiáng)化學(xué)習(xí)還是其他類型的問題。
確定業(yè)務(wù)背景和需求,了解所處理數(shù)據(jù)的現(xiàn)實(shí)意義。
數(shù)據(jù)收集:
根據(jù)任務(wù)目標(biāo)從各種來源獲取原始數(shù)據(jù),可以是數(shù)據(jù)庫、文件、傳感器、網(wǎng)絡(luò)日志等。
數(shù)據(jù)預(yù)處理:
數(shù)據(jù)清洗:處理缺失值、異常值、重復(fù)值等問題。
數(shù)據(jù)轉(zhuǎn)換:對(duì)數(shù)據(jù)進(jìn)行規(guī)范化、標(biāo)準(zhǔn)化、歸一化等操作以適應(yīng)模型要求。
特征編碼:將非數(shù)值特征(如類別標(biāo)簽)轉(zhuǎn)化為數(shù)值形式。
特征工程:
特征選擇:根據(jù)相關(guān)性和重要性篩選出最有價(jià)值的特征。
特征提取或構(gòu)造:通過統(tǒng)計(jì)分析、降維技術(shù)(如PCA)、特征交叉等方式生成新的特征。
數(shù)據(jù)劃分:
將數(shù)據(jù)集劃分為訓(xùn)練集、驗(yàn)證集和測(cè)試集,用于訓(xùn)練模型、調(diào)整參數(shù)以及評(píng)估模型性能。
模型選擇與訓(xùn)練:
根據(jù)問題特點(diǎn)選擇合適的機(jī)器學(xué)習(xí)算法,如決策樹、支持向量機(jī)、神經(jīng)網(wǎng)絡(luò)、隨機(jī)森林等。
使用訓(xùn)練集對(duì)模型進(jìn)行訓(xùn)練,并可能涉及到超參數(shù)調(diào)整優(yōu)化。
模型評(píng)估:
在驗(yàn)證集上使用不同的評(píng)價(jià)指標(biāo)(如準(zhǔn)確率、AUC、F1分?jǐn)?shù)、RMSE等)來評(píng)估模型性能。
通過交叉驗(yàn)證等方法確保評(píng)估結(jié)果穩(wěn)定可靠。
模型調(diào)優(yōu):
根據(jù)驗(yàn)證集上的表現(xiàn)調(diào)整模型參數(shù)或更換模型,以提高預(yù)測(cè)性能。
模型驗(yàn)證與確認(rèn):
使用獨(dú)立的測(cè)試集對(duì)經(jīng)過調(diào)優(yōu)的模型進(jìn)行最終評(píng)估,確定模型在未見過的數(shù)據(jù)上的泛化能力。
模型部署與監(jiān)控:
將訓(xùn)練好的模型應(yīng)用到實(shí)際系統(tǒng)中,例如嵌入應(yīng)用程序、API服務(wù)或?qū)崟r(shí)系統(tǒng)中。
監(jiān)控模型在生產(chǎn)環(huán)境中的表現(xiàn),定期更新或重新訓(xùn)練模型以保持其性能。
讓我們以鳶尾花分類問題為例,并結(jié)合代碼詳細(xì)講解每個(gè)步驟:
問題定義與理解: 我們要解決的問題是基于鳶尾花數(shù)據(jù)集進(jìn)行多類別分類。該數(shù)據(jù)集包含了4種特征(花瓣長(zhǎng)度、花瓣寬度、花萼長(zhǎng)度、花萼寬度)和3個(gè)類別標(biāo)簽(Setosa, Versicolour, Virginica)。
數(shù)據(jù)收集: 通過sklearn.datasets庫加載鳶尾花數(shù)據(jù)集。
from sklearn.datasets import load_iris
加載數(shù)據(jù)集
iris = load_iris()
X = iris.data # 特征數(shù)據(jù),形狀為(150, 4)
y = iris.target # 類別標(biāo)簽,形狀為(150,)
print("特征維度:", X.shape)
print("類別標(biāo)簽:", np.unique(y))
數(shù)據(jù)預(yù)處理: 鳶尾花數(shù)據(jù)集已經(jīng)清理過,無需額外處理缺失值或異常值。但為了演示,我們?nèi)詫?duì)其進(jìn)行標(biāo)準(zhǔn)化操作。
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X) # 對(duì)特征數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化
此處實(shí)際上鳶尾花數(shù)據(jù)集的數(shù)值范圍較小且分布均勻,標(biāo)準(zhǔn)化非必須
特征工程: 在這個(gè)例子中,原始特征足以描述樣本,因此不需要構(gòu)造新的特征。
數(shù)據(jù)劃分: 使用train_test_split函數(shù)將數(shù)據(jù)劃分為訓(xùn)練集和測(cè)試集。
from sklearn.model_selection import train_test_split
劃分?jǐn)?shù)據(jù)集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
模型選擇與訓(xùn)練: 我們選擇使用邏輯回歸作為分類器進(jìn)行訓(xùn)練。
from sklearn.linear_model import LogisticRegression
創(chuàng)建邏輯回歸模型
clf = LogisticRegression(multi_class='multinomial', solver='lbfgs')
訓(xùn)練模型
clf.fit(X_train, y_train)
模型評(píng)估: 訓(xùn)練完成后,在測(cè)試集上評(píng)估模型性能。
from sklearn.metrics import accuracy_score, classification_report
預(yù)測(cè)測(cè)試集結(jié)果
y_pred = clf.predict(X_test)
計(jì)算準(zhǔn)確率
accuracy = accuracy_score(y_test, y_pred)
print("模型準(zhǔn)確率:", accuracy)
打印詳細(xì)的分類報(bào)告
print(classification_report(y_test, y_pred))
模型調(diào)優(yōu): 假設(shè)我們需要優(yōu)化模型,可以嘗試調(diào)整參數(shù),例如正則化強(qiáng)度C。
使用網(wǎng)格搜索尋找最優(yōu)參數(shù)
# 導(dǎo)入 GridSearchCV,這是一個(gè)用于網(wǎng)格搜索的類,用于尋找最佳參數(shù)
from sklearn.model_selection import GridSearchCV
#是 一個(gè)字典,包含要搜索的參數(shù)和它們的范圍,它是邏輯 分類器的參數(shù)
#L-BFGS 是一個(gè)梯度下降優(yōu)化器,它使用L-BFGS 優(yōu)化器,
param_grid = {'C': [0.001, 0.01, 0.1, 1, 10]}
#實(shí)例化一個(gè)邏輯分類器,使用邏輯回歸模型,指定multinomial多項(xiàng)式貝葉斯分類器,使用L-BFGS擬牛頓算法 作為優(yōu)化器,cv交差驗(yàn)證設(shè)置為5
#cv=5把數(shù)據(jù)集分成5個(gè)子集,一個(gè)驗(yàn)證集,四個(gè)訓(xùn)練集
grid_search = GridSearchCV(LogisticRegression(multi_class='multinomial', solver='lbfgs'), param_grid, cv=5)
grid_search.fit(X_train, y_train)
#保存最佳參數(shù)到一個(gè)變量中g(shù)est_clf
best_clf = grid_search.best_estimator_
print("最佳參數(shù):", grid_search.best_params_)
模型驗(yàn)證與確認(rèn): 用最優(yōu)參數(shù)重新訓(xùn)練模型,并在測(cè)試集上再次評(píng)估。
使用最優(yōu)參數(shù)訓(xùn)練模型并預(yù)測(cè)
best_clf.fit(X_train, y_train)
y_pred_best = best_clf.predict(X_test)
再次計(jì)算準(zhǔn)確率
accuracy_best = accuracy_score(y_test, y_pred_best)
print("優(yōu)化后模型準(zhǔn)確率:", accuracy_best)
模型部署與監(jiān)控: 實(shí)際應(yīng)用時(shí),經(jīng)過訓(xùn)練和調(diào)優(yōu)的模型會(huì)被打包成API服務(wù)或嵌入到應(yīng)用程序中,同時(shí)需要對(duì)模型在新數(shù)據(jù)上的表現(xiàn)進(jìn)行持續(xù)監(jiān)控,當(dāng)模型性能下降時(shí)需及時(shí)更新模型。此處簡(jiǎn)化演示過程,略去部署環(huán)節(jié)。
L-BFGS優(yōu)化的多項(xiàng)式邏輯回歸網(wǎng)格搜索:尋找最佳C參數(shù)
L-BFGS優(yōu)化器
L-BFGS(Limited-memory Broyden-Fletcher-Goldfarb-Shanno)是一種在機(jī)器學(xué)習(xí)中廣泛使用的優(yōu)化算法,特別是在訓(xùn)練大規(guī)模神經(jīng)網(wǎng)絡(luò)時(shí)。L-BFGS屬于擬牛頓法的一種,它通過逼近牛頓法中的Hessian矩陣(二階導(dǎo)數(shù)矩陣)來優(yōu)化目標(biāo)函數(shù),但是相比于傳統(tǒng)的BFGS算法,L-BFGS通過限制存儲(chǔ)歷史信息的數(shù)量來減少內(nèi)存消耗,使得其能夠處理更大規(guī)模的問題。
L-BFGS優(yōu)化器的實(shí)現(xiàn)過程主要包括以下幾個(gè)步驟:
初始化:選擇初始點(diǎn) x0x_0x0? 和初始化矩陣 B0B_0B0?(通常為單位矩陣)。
計(jì)算梯度和方向:在每一步迭代中,計(jì)算目標(biāo)函數(shù) f(x)f(x)f(x) 在當(dāng)前點(diǎn) xxx 的梯度 gkg_kgk?。然后,通過求解線性方程組 Bkpk=?gkB_k p_k = -g_kBk?pk?=?gk? 來得到搜索方向 pkp_kpk?。
一維搜索:沿著搜索方向 pkp_kpk? 進(jìn)行一維搜索,找到使目標(biāo)函數(shù) f(x)f(x)f(x) 減小的步長(zhǎng) αk\alpha_kαk?。
更新:根據(jù)找到的步長(zhǎng) αk\alpha_kαk? 更新當(dāng)前點(diǎn) xxx 和函數(shù)值 f(x)f(x)f(x),并計(jì)算新的梯度 gk+1g_{k+1}gk+1?。
更新矩陣 Bk+1B_{k+1}Bk+1?:利用當(dāng)前的梯度 gkg_kgk? 和 gk+1g_{k+1}gk+1? 以及搜索方向 pkp_kpk? 來更新逼近Hessian矩陣的逆矩陣 BkB_kBk?,得到 Bk+1B_{k+1}Bk+1?。這一步是L-BFGS的核心,它通過保留最近的 mmm 個(gè)向量對(duì)來近似完整的BFGS更新,從而降低了內(nèi)存消耗。
迭代終止條件:檢查是否滿足迭代終止條件,如梯度范數(shù)小于某個(gè)閾值或達(dá)到最大迭代次數(shù)。如果滿足,則停止迭代;否則,返回步驟2繼續(xù)迭代。
L-BFGS優(yōu)化器在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí)具有以下優(yōu)點(diǎn):
內(nèi)存效率:L-BFGS通過限制存儲(chǔ)歷史信息的數(shù)量來降低內(nèi)存消耗,使其能夠處理大規(guī)模問題。
快速收斂:擬牛頓法通常比梯度下降法具有更快的收斂速度,因?yàn)樗鼈冊(cè)诿恳徊降卸祭昧烁嗟那市畔ⅰ?br> 通用性:L-BFGS可以應(yīng)用于各種類型的問題,只要目標(biāo)函數(shù)是可微的。
然而,L-BFGS也有一些局限性:
非凸問題:對(duì)于高度非凸的目標(biāo)函數(shù),L-BFGS可能會(huì)陷入局部最小值或鞍點(diǎn)。
參數(shù)敏感:L-BFGS的性能可能受到一些參數(shù)的影響,如歷史信息的數(shù)量 mmm 和一維搜索的精度。選擇合適的參數(shù)可能需要一些經(jīng)驗(yàn)或?qū)嶒?yàn)
cv=5
是用于交叉驗(yàn)證的參數(shù)設(shè)置,表示將數(shù)據(jù)集分成5個(gè)子集進(jìn)行交叉驗(yàn)證。交叉驗(yàn)證是一種評(píng)估機(jī)器學(xué)習(xí)模型性能的方法,其中一個(gè)子集作為驗(yàn)證集,其余的子集作為訓(xùn)練集。使用cv=5的好處包括:文章來源:http://www.zghlxwxcb.cn/news/detail-800499.html
更準(zhǔn)確的模型評(píng)估:通過將數(shù)據(jù)分為5個(gè)子集并進(jìn)行多次訓(xùn)練和驗(yàn)證,可以獲得更穩(wěn)定和可靠的模型性能評(píng)估結(jié)果。這有助于減少過擬合或欠擬合的風(fēng)險(xiǎn),并提供對(duì)模型泛化能力的更好估計(jì)。
更好的利用數(shù)據(jù):相比于簡(jiǎn)單的訓(xùn)練-測(cè)試分割,交叉驗(yàn)證可以更充分地利用數(shù)據(jù)集。每個(gè)子集都有機(jī)會(huì)被用作驗(yàn)證集,從而更全面地評(píng)估模型在不同數(shù)據(jù)子集上的性能。
發(fā)現(xiàn)模型的穩(wěn)定性:通過多次交叉驗(yàn)證,可以觀察模型在不同劃分下的性能變化。如果模型在多次交叉驗(yàn)證中表現(xiàn)穩(wěn)定,那么可以認(rèn)為模型具有較好的穩(wěn)定性和魯棒性。
調(diào)整超參數(shù):交叉驗(yàn)證還可以用于調(diào)整模型的超參數(shù)。通過在交叉驗(yàn)證過程中嘗試不同的超參數(shù)組合,可以選擇在驗(yàn)證集上表現(xiàn)最佳的超參數(shù)配置。
需要注意的是,雖然cv=5具有上述優(yōu)點(diǎn),但在某些情況下,可能需要使用其他值的交叉驗(yàn)證(例如cv=10),具體取決于數(shù)據(jù)集的大小、特性和所需的評(píng)估精度。文章來源地址http://www.zghlxwxcb.cn/news/detail-800499.html
到了這里,關(guān)于【機(jī)器學(xué)習(xí)實(shí)例講解】機(jī)器學(xué)習(xí)-鳶尾花數(shù)據(jù)集多分類第02課的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!