介紹
評估機器學習模型不僅是最後一步,而且是成功的基石。想像一下,建立一個高精度使其眼花azz亂的尖端模型,只是發現它在現實世界的壓力下崩潰了。評估不僅僅是滴定指標;這是關於確保您的模型在野外始終如一。在本文中,我們將潛入常見的陷阱,這些陷阱甚至可能是最有希望的分類模型,並揭示可以將您的模型從良好提升到卓越的最佳實踐。讓我們將您的分類建模任務變成可靠,有效的解決方案。
概述
- 構建分類模型:通過分步指導構建一個固體分類模型。
- 識別頻繁的錯誤:在分類建模中發現並避免常見的陷阱。
- 理解過度擬合:了解過度擬合併學習如何在模型中預防它。
- 提高模型構建技能:通過最佳實踐和高級技術來增強您的模型構建技能。
目錄
- 介紹
- 分類建模:概述
- 建立基本分類模型
- 1。數據準備
- 2。邏輯回歸
- 3。支持向量機(SVM)
- 4。決策樹
- 5。帶張量的神經網絡
- 確定錯誤
- 使用網格搜索改進邏輯回歸的示例
- 帶有張量的神經網絡
- 了解各種指標的意義
- 模型性能的可視化
- 結論
- 常見問題
分類建模:概述
在分類問題中,我們嘗試構建一個模型,該模型使用自變量預測目標變量的標籤。當我們處理標記的目標數據時,我們將需要監督的機器學習算法,例如邏輯回歸,SVM,決策樹等。我們還將研究用於解決分類問題的神經網絡模型,確定人們可能犯的常見錯誤,並確定如何避免它們。
建立基本分類模型
我們將展示使用Kaggle的日期工作數據集創建基本分類模型。關於數據集:目標變量由七種類型的日期水果組成:Barhee,Deglet Nour,Sukkary,Rotab Mozafati,Ruthana,Ruthana,Safawi和Sagai。數據集由898張圖像組成,這些圖像七個不同的日期水果品種,並通過圖像處理技術提取了34個特徵。目的是根據其屬性對這些水果進行分類。
1。數據準備
導入大熊貓作為pd 來自sklearn.model_selection導入train_test_split 從sklearn.prepercorsing進口標準標準 #加載數據集 data = pd.read_excel('/content/date_fruit_datasets.xlsx') #將數據分為功能和目標 x = data.drop('class',軸= 1) y =數據['class'] #將數據集分為培訓和測試集 x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.3,andural_state = 42) #功能縮放 sualer = StandardScaler() x_train = scaler.fit_transform(x_train) x_test = scaler.transform(x_test)
2。邏輯回歸
來自sklearn.linear_model導入logisticRegress 來自Sklearn.metrics導入精度_score #邏輯回歸模型 log_reg = logisticRegress() log_reg.fit(x_train,y_train) #預測和評估 y_train_pred = log_reg.redict(x_train) y_test_pred = log_reg.redict(x_test) # 準確性 train_acc = efceracy_score(y_train,y_train_pred) test_acc = efceracy_score(y_test,y_test_pred) 打印(f'logistic回歸 - 火車準確性:{train_acc},測試準確性:{test_acc}')
結果:
- 邏輯回歸 - 火車準確性:0.9538<br><br> - 測試準確性:0.9222
另請閱讀:邏輯回歸簡介
3。支持向量機(SVM)
來自Sklearn.svm導入SVC 來自Sklearn.metrics導入精度_score #svm svm = svc(kernel ='linear',概率= true) svm.fit(x_train,y_train) #預測和評估 y_train_pred = svm.predict(x_train) y_test_pred = svm.predict(x_test) train_accuracy = ecuctacy_score(y_train,y_train_pred) test_accuracy = efcucy_score(y_test,y_test_pred) 打印(f“ svm-火車準確性:{train_accuracy},測試準確性:{test_accuracy}”)
結果:
-SVM-火車準確性:0.9602<br><br> - 測試準確性:0.9074
另請閱讀:支持向量機(SVM)算法指南
4。決策樹
從Sklearn.Tre Import DecisionTreeTreclalerifier 來自Sklearn.metrics導入精度_score #決策樹 tree = dekistionTreeClalsifier(Random_State = 42) tree.fit(x_train,y_train) #預測和評估 y_train_pred = tree.predict(x_train) y_test_pred = tree.predict(x_test) train_accuracy = ecuctacy_score(y_train,y_train_pred) test_accuracy = efcucy_score(y_test,y_test_pred) 打印(f“決策樹 - 火車準確性:{train_accuracy},測試準確性:{test_accuracy}”)
結果:
- 決策樹 - 火車準確性:1.0000<br><br> - 測試準確性:0.8222
5。帶張量的神經網絡
導入numpy作為NP 從Sklearn.Preprocessing Import LabElenCoder,StandardardScaler 來自sklearn.model_selection導入train_test_split 從TensorFlow.keras導入模型,層 從TensorFlow.keras.callbacks導入早期踩踏,modelCheckpoint #標籤編碼目標類 label_encoder = labelencoder() y_encoded = label_encoder.fit_transform(y) #火車測試拆分 x_train,x_test,y_train,y_test = train_test_split(x,y_encoded,test_size = 0.2,andury_state = 42) #功能縮放 sualer = StandardScaler() x_train = scaler.fit_transform(x_train) x_test = scaler.transform(x_test) #神經網絡 模型=模型。 layers.dense(64,activation ='relu',input_shape =(x_train.shape [1],)),), layers.dense(32,激活='relu'), layers.dense(len(np.unique(y_encoded))),激活='softmax')#確保輸出層大小與類數量 ))) model.compile(優化器='adam',loss ='sparse_categorical_crossentropy',metrics = ['fecicy']) #回調 早期_STOPPING =早期stopping(Monitor ='Val_loss',耐心= 10,Restore_best_weights = true) model_checkpoint = modelCheckpoint('best_model.keras',monitor ='val_loss',save_best_only = true) #訓練模型 歷史= model.fit(x_train,y_train,epochs = 100,batch_size = 32,validation_data =(x_test,y_test), 回調= [早期_Stopping,model_checkpoint],詳細= 1) #評估模型 train_loss,train_accuracy = model.evaluate(x_train,y_train,冗長= 0) test_loss,test_accuracy = model.evaluate(x_test,y_test,冗長= 0) 打印(f“神經網絡 - 火車精度:{train_accuracy},測試精度:{test_accuracy}”)
結果:
- 神經網絡 - 火車準確性:0.9234<br><br> - 測試準確性:0.9278
另請閱讀:使用TensorFlow構建神經網絡
確定錯誤
分類模型可能會遇到一些可能損害其有效性的挑戰。必須識別和解決這些問題以建立可靠的模型。以下是要考慮的一些關鍵方面:
-
過於擬合和不足:
- 交叉驗證:避免僅取決於單列火車測試拆分。利用K折的交叉驗證來通過對各種數據段進行測試來更好地評估模型的性能。
- 正則化:高度複雜的模型可能會通過捕獲數據中的噪聲而過度。諸如修剪或正則化之類的正規化方法應用於懲罰複雜性。
- 高參數優化:徹底探索和調整超參數(例如,通過網格或隨機搜索)來平衡偏差和方差。
-
合奏技術:
- 模型聚集:諸如隨機森林或梯度增強的集合方法結合了多個模型的預測,通常會導致概括。這些技術可以在數據中捕獲複雜的模式,同時通過平均單個模型錯誤來減輕過度擬合的風險。
-
班級失衡:
- 班級不平衡:在許多情況下,一個類可能比其他類別少,導致偏見的預測。必鬚根據問題使用諸如過採樣,底漆或SMOTE之類的方法。
-
數據洩漏:
- 無意的洩漏:數據洩漏發生在訓練集外部的信息會影響模型時導致膨脹性能指標時。至關重要的是要確保在培訓期間完全看不見測試數據,並且要謹慎管理從目標變量獲得的功能。
使用網格搜索改進邏輯回歸的示例
來自sklearn.model_selection導入GridSearchCV #實施網格搜索邏輯回歸 param_grid = {'c':[0.1,1,10,100],'solver':['lbfgs']} grid_search = GridSearchCV(LogisticRegression(Multi_class ='MultiNomial',max_iter = 1000),param_grid,cv = 5) grid_search.fit(x_train,y_train) #最佳模型 best_model = grid_search.best_estimator_ #評估測試集 test_accuracy = best_model.score(x_test,y_test) 打印(f“最佳邏輯回歸 - 測試精度:{test_accuracy}”)
結果:
- 最佳邏輯回歸 - 測試準確性:0.9611
帶有張量的神經網絡
讓我們專注於改善以前的神經網絡模型,專注於最大程度地減少過度擬合和增強概括的技術。
提早停止和模型檢查點
早期停止在模型的驗證性能高原時停止訓練,從而避免從訓練數據噪聲中學習過多,從而防止過度適應。
模型檢查點可以節省在整個訓練中驗證集中最佳的模型,從而確保保留最佳模型版本,即使隨後的培訓導致過度擬合。
導入numpy作為NP 從Sklearn.Preprocessing Import LabElenCoder,StandardardScaler 來自sklearn.model_selection導入train_test_split 從TensorFlow.keras導入模型,層 從TensorFlow.keras.callbacks導入早期踩踏,modelCheckpoint #標籤編碼目標類 label_encoder = labelencoder() y_encoded = label_encoder.fit_transform(y) #火車測試拆分 x_train,x_test,y_train,y_test = train_test_split(x,y_encoded,test_size = 0.2,andury_state = 42) #功能縮放 sualer = StandardScaler() x_train = scaler.fit_transform(x_train) x_test = scaler.transform(x_test) #神經網絡 模型=模型。 layers.dense(64,activation ='relu',input_shape =(x_train.shape [1],)),), layers.dense(32,激活='relu'), layers.dense(len(np.unique(y_encoded))),激活='softmax')#確保輸出層大小與類數量 ))) model.compile(優化器='adam',loss ='sparse_categorical_crossentropy',metrics = ['fecicy']) #回調 早期_STOPPING =早期stopping(Monitor ='Val_loss',耐心= 10,Restore_best_weights = true) model_checkpoint = modelCheckpoint('best_model.keras',monitor ='val_loss',save_best_only = true) #訓練模型 歷史= model.fit(x_train,y_train,epochs = 100,batch_size = 32,validation_data =(x_test,y_test), 回調= [早期_Stopping,model_checkpoint],詳細= 1) #評估模型 train_loss,train_accuracy = model.evaluate(x_train,y_train,冗長= 0) test_loss,test_accuracy = model.evaluate(x_test,y_test,冗長= 0) 打印(f“神經網絡 - 火車精度:{train_accuracy},測試精度:{test_accuracy}”)
了解各種指標的意義
- 準確性:儘管重要的是,精度可能無法完全捕獲模型的性能,尤其是在處理不平衡的班級分佈時。
- 損失:損耗函數評估預測值與真實標籤的對齊程度;較小的損耗值表示較高的精度。
- 精度,召回和F1得分:精確評估正面預測的正確性,召回衡量該模型在識別所有陽性案例方面的成功,以及F1得分平衡的精度和回憶。
- ROC-AUC :ROC-AUC度量標準量量化了模型區分類別的能力,無論閾值設置如何。
來自sklearn.metrics導入classification_report,roc_auc_score #預測 Y_TEST_PRED_PROBA = model.predict(x_test) y_test_pred = np.argmax(y_test_pred_proba,axis = 1) #分類報告 print(classification_report(y_test,y_test_pred)) #Roc-auc roc_auc = roc_auc_score(y_test,y_test_pred_proba,multi_class ='ovr') 打印(f'Roc-auc得分:{roc_auc}')
模型性能的可視化
通過繪製學習曲線的準確性和損失,可以看到該模型在訓練過程中的性能,以表明該模型是否過於擬合還是不適合。我們使用早期停止來防止過度擬合,這有助於推廣到新數據。
導入matplotlib.pyplot作為PLT #情節培訓和驗證精度值 plt.figure(無花果=(14,5)) plt.subplot(1,2,1) plt.plot(歷史學家['準確性']) plt.plot(history.history ['val_accuracy']) plt.title(“模型精度”) plt.xlabel('epoch') plt.ylabel(“準確性”) plt.legend(['train','驗證'],loc =“左上”) #情節培訓和驗證損失值 plt.subplot(1,2,2) plt.plot(歷史學家['損失']) plt.plot(歷史學家['val_loss']) plt.title(“模型損失”) plt.xlabel('epoch') plt.ylabel(“損失”) plt.legend(['train','驗證'],loc =“左上”) plt.show()
結論
細緻的評估對於防止過度擬合和不足之類的問題至關重要。建立有效的分類模型不僅涉及選擇和培訓正確的算法。可以通過實施集合方法,正則化,調整超級計和交叉驗證來增強模型一致性和可靠性。儘管我們的小型數據集可能沒有經歷過過度擬合,但採用這些方法可確保模型堅固且精確,從而在實際應用中更好地決策。
常見問題
Q1。為什麼評估機器學習模型超出準確性很重要?Ans。雖然準確性是關鍵指標,但並不總是給出完整的圖片,尤其是在數據集中的情況下。評估一致性,魯棒性和泛化等其他方面,可確保模型在各種情況下的表現良好,而不僅僅是在受控的測試條件下。
Q2。在建立分類模型時,要避免的常見錯誤是什麼?Ans。常見的錯誤包括過度擬合,擬合不足,數據洩漏,忽略類失衡以及無法正確驗證模型。這些問題可能會導致模型在測試中表現良好,但在現實世界中的應用中失敗。
Q3。我如何防止分類模型過度擬合?Ans。通過交叉驗證,正則化,早期停止和集合方法可以緩解過度擬合。這些方法有助於平衡模型的複雜性,並確保其良好地推廣到新數據。
Q4。我應該用什麼指標來評估分類模型的性能?Ans。除了準確性之外,還要考慮諸如精度,召回,F1得分,ROC-AUC和損失之類的指標。這些指標提供了對模型性能的更加細微的理解,尤其是在處理不平衡數據並進行準確的預測方面。
以上是您是否在分類建模中犯了這些錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

高效保存ChatGPT對話記錄的多種方法 您是否曾想過保存ChatGPT生成的對話記錄?本文將詳細介紹多種保存方法,包括官方功能、Chrome擴展程序和截圖等,助您充分利用ChatGPT對話記錄。 了解各種方法的特點和步驟,選擇最適合您的方式。 [OpenAI最新發布的AI代理“OpenAI Operator”介紹](此處應插入OpenAI Operator的鏈接) 目錄 使用ChatGPT導出功能保存對話記錄 官方導出功能的使用步驟 使用Chrome擴展程序保存ChatGPT日誌 ChatGP

现代社会节奏紧凑,高效的日程管理至关重要。工作、生活、学习等任务交织在一起,优先级排序和日程安排常常让人头疼不已。 因此,利用AI技术的智能日程管理方法备受关注。特别是利用ChatGPT强大的自然语言处理能力,可以自动化繁琐的日程安排和任务管理,显著提高生产力。 本文将深入讲解如何利用ChatGPT进行日程管理。我们将结合具体的案例和步骤,展示AI如何提升日常生活和工作效率。 此外,我们还会讨论使用ChatGPT时需要注意的事项,确保安全有效地利用这项技术。 立即体验ChatGPT,让您的日程

我們將解釋如何將Google表和Chatgpt聯繫起來,以提高業務效率。在本文中,我們將詳細解釋如何使用易於使用的“床單和文檔的GPT”附加組件。無需編程知識。 通過CHATGPT和電子表格集成提高業務效率 本文將重點介紹如何使用附加組件將Chatgpt與電子表格連接。附加組件使您可以輕鬆地將ChatGpt功能集成到電子表格中。 gpt for shee

專家們預測AI革命的未來幾年,專家們預測專家們都在強調了總體趨勢和模式。例如,對數據的需求很大,我們將在後面討論。此外,對能量的需求是D

Chatgpt不僅是文本生成工具,而且是一個真正的合作夥伴,可顯著提高作家的創造力。通過在整個寫作過程中使用chatgpt,例如初始手稿創建,構思想法和風格變化,您可以同時節省時間並提高質量。本文將詳細說明在每個階段使用Chatgpt的特定方法,以及最大化生產力和創造力的技巧。此外,我們將研究將Chatgpt與語法檢查工具和SEO優化工具相結合的協同作用。通過與AI的合作,作家可以通過免費想法創造獨創性

使用chatgpt的數據可視化:從圖創建到數據分析 數據可視化以易於理解的方式傳達複雜信息,在現代社會中至關重要。近年來,由於AI技術的進步,使用Chatgpt的圖形創建引起了人們的關注。在本文中,我們將解釋如何以易於理解的方式使用Chatgpt創建圖形,甚至對於初學者。我們將介紹免費版本和付費版本(Chatgpt Plus),特定創建步驟以及如何顯示日語標籤以及實際示例之間的差異。 使用chatgpt創建圖形:從基礎到高級使用 chatg

通常,我們知道AI很大,而且越來越大。快速,越來越快。 但是,具體來說,並不是每個人都熟悉行業中一些最新的硬件和軟件方法,以及它們如何促進更好的結果。人民

ChatGPT對話記錄管理指南:高效整理,充分利用你的知識寶庫! ChatGPT對話記錄是創意和知識的源泉,但不斷增長的記錄如何有效管理呢? 查找重要信息耗時費力?別擔心!本文將詳細講解如何有效“歸檔”(保存和管理)你的ChatGPT對話記錄。我們將涵蓋官方歸檔功能、數據導出、共享鏈接以及數據利用和注意事項。 目錄 ChatGPT的“歸檔”功能詳解 ChatGPT歸檔功能使用方法 ChatGPT歸檔記錄的保存位置和查看方法 ChatGPT歸檔記錄的取消和刪除方法 取消歸檔 刪除歸檔 總結 Ch


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用

Dreamweaver CS6
視覺化網頁開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境