吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

構建算法的推薦步驟

深度學習自然語言處理 ? 來源:登龍 ? 2020-08-28 10:21 ? 次閱讀

一、構建算法推薦步驟

當我們遇到一個問題,比如預測房價,我們想要用機器學習算法來更好的解決這個問題,推薦的步驟如下:

1.1 實現一個簡單的算法

建議先花點時間實現一個簡單能用的算法,比如線性回歸預測房價,不需要一開始就花很多時間設計復雜的算法(在軟件開發中叫避免過早優化)

你可以先實現能用的算法,然后利用上篇文章從 0 開始機器學習 - 機器學習算法診斷中的學習曲線等診斷法來分析算法的優化方向,這樣一個簡單的算法就成為了優化問題的好工具!

1.2 分析學習曲線

有個簡單的算法后,我們就可以畫出學習曲線了,然后就可以決定下一步到底要往哪個方向做優化:

獲得更多的訓練樣本

嘗試減少特征的數量

嘗試獲得更多的特征

嘗試增加多項式特征

嘗試減少正則化程度

嘗試增加正則化程度

...

1.3 誤差分析

假如我們有多個方向可以作為優化的方向,比如以下的方向都可以解決模型的高方差問題:

獲得更多的訓練樣本 - 適用于高方差的模型

嘗試減少特征的數量 - 適用于高方差的模型

嘗試增加正則化程度 - 適用于高方差的模型

那我們又如何來評估每種方法的性能到底提升多少呢?或者說有沒有一種直接的指標來告訴我,使用了這樣一種優化措施后我的算法性能到底提高了多少百分比?

今天就來看看如何分析機器學習算法的誤差。

二、機器學習算法誤差分析

2.1 偏斜類問題

在介紹誤差分析指標前,先來了解一個偏斜類問題:

訓練集中有非常多同一類的樣本,只有很少或者沒有其他類的樣本,這樣的訓練樣本稱為偏斜類。

比如預測癌癥是否惡性的 100 個樣本中:95 個是良性的腫瘤,5 個惡性的腫瘤,假設我們在這個樣本上對比以下 2 種分類算法的百分比準確度,即分類錯誤的百分比:

普通非機器學習算法:人為把所有的樣本都預測為良性,則分錯了 5 個惡性的樣本,錯誤率為 5 / 100 = 0.05 = 5%

神經網絡算法:訓練后預測 100 個樣本,把 10 個良性的樣本誤分類為惡性的樣本,錯誤率為 10 / 100 = 10%

如果僅僅從錯誤率大小來判斷算法的優劣是不合適的,因為第一種人為設置樣本都為良性的算法不會在實際項目中使用,但是通過指標卻發現效果比神經網絡還要好,這肯定是有問題的。

正是因為存在這么一種偏斜類的訓練樣本,所以我們需要用一個更加一般性的算法準確度評價指標,以此適用與任何類型的樣本,解決上面那種荒唐的結論。

2.2 查準率與查全率

為了解決這個問題,使用查準率(Precision)和查全率(Recall)這 2 個誤差指標,為了計算這 2 者,我們需要把算法預測的結果分為以下 4 種:

正確肯定(True Positive,TP):預測為真,實際為真

正確否定(True Negative,TN):預測為假,實際為假

錯誤肯定(False Positive,FP):預測為真,實際為假

錯誤否定(False Negative,FN):預測為假,實際為真

把這 4 個寫到表格里面:

Positive Negative
Positive TP FN
Negative FP TN
實際值 預測值

然后我們就可以定義這 2 個指標啦:

查準率 = TP / (TP + FP):預測為真(惡性腫瘤)的情況中,實際為真(惡性腫瘤)的比例,越高越好

查全率 = TP / (TP + FN):實際為真(惡性腫瘤)的情況中,預測為真(惡性腫瘤)的比例,越高越好

有了這 2 個指標我們再來分析下上面的算法性能,第一個人為的算法認為所有的腫瘤都是良性的,也就等價于原樣本中 5 個惡性的腫瘤樣本一個都沒有預測成功,也即所有惡性腫瘤樣本,該算法成功預測惡性腫瘤的比例為 0,所以查全率為 0,這說明該算法的效果并不好。

2.3 查準率與查全率的整合

在實際的使用中,查準率和查全率往往不能很好的權衡,要想保持兩者都很高不太容易,通過使用以下的公式來整合這 2 個評價指標可以幫助我們直接看出一個算法的性能優劣:

以后評價一個算法的性能直接比較 F1 Score 即可,這就大大方便了我們對比算法的性能。

三、機器學習的樣本規模

除了評價指標,還有一個要關心的問題就是樣本的規模,在機器學習領域有一句話:「取得成功的人不是擁有最好算法的人,而是擁有最多數據的人」

這句話的意思就是說當我們擁有非常多的數據時,選擇什么樣的算法不是最最重要的,一些在小樣本上表現不好的算法,經過大樣本的訓練往往也能表現良好。

比如下面這 4 種算法在很大樣本上訓練后的效果相差不是很大,但是在小樣本時有挺大差距:

但在實際的機器學習算法中,為了能夠使得訓練數據發揮最大效用,我們往往會選一個比較好的模型(不太容易欠擬合,比如神經網絡),再加上很多的樣本數據(防止過擬合)

通過這 2 者就可以讓一個算法變的很強大,所以以后當你設計機器學習算法的時候一定要考慮自己的樣本規模,選擇合適的模型適應你的數據,如果你有很多很多的數據,那么可以選擇復雜一點的模型,不能白白浪費你的數據!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4630

    瀏覽量

    93355
  • 模型
    +關注

    關注

    1

    文章

    3305

    瀏覽量

    49220
  • 機器學習
    +關注

    關注

    66

    文章

    8438

    瀏覽量

    133084

原文標題:從 0 開始機器學習 - 機器學習系統的設計與誤差分析

文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    RNN算法的三個關鍵步驟

    DL之RNN:RNN算法相關論文、相關思路、關鍵步驟、配圖集合+TF代碼定義
    發表于 12-28 14:20

    MAKEFILE條件預構建步驟

    您好,我在項目中有兩個配置,我想在構建配置之前做一些事情。我已經在項目屬性中使用了預構建步驟,但有不同的東西。我可以使用“IFEQ”來選擇MaFIX文件“.BuffPi::”部分中的配置的預
    發表于 01-30 07:54

    六大步驟學習貝葉斯算法

    學習貝葉斯算法的五個步驟
    發表于 07-16 16:57

    怎么將#define值傳遞給后期構建步驟

    我想創建一個打包后的步驟來打包我的版本。我們使用C源代碼中的一個定義來配置我們的構建。是否有人知道一種方法,可以在后生成步驟中從源代碼中傳遞清單常數的值?例如,如果在Cfg.h中存在
    發表于 10-08 10:17

    PID算法調試步驟

    0、前言在我看來,其實控制題是較好做(混)的一種題型,你懂我意思吧。控制題簡單概括下,大概就是三個步驟。1、構建整體方案。2、設計整體控制電路。3、軟件程序設計—PID算法調試。1 、整體方案拿到
    發表于 11-30 06:34

    有什么方法可以添加閃存前和閃存后構建步驟嗎?

    有什么方法可以添加閃存前和閃存后構建步驟嗎?對于我的系統,我必須向 ESP 發送一條特殊命令以將其置于引導加載程序模式,然后再發送一條命令使其真正啟動。除了正常的構建步驟之外,我似乎無
    發表于 03-02 08:36

    有什么方法可以添加閃存前和閃存后構建步驟嗎?

    有什么方法可以添加閃存前和閃存后構建步驟嗎?對于我的系統,我必須向 ESP 發送一條特殊命令以將其置于引導加載程序模式,然后再發送一條命令使其真正啟動。除了正常的構建步驟之外,我似乎無
    發表于 04-14 08:07

    基于設備性能的藍牙散列網構建算法

    藍牙規范中沒有提供藍牙散列網的構建方法。該文采用基于設備性能組建散列網的思想,提出一種散列網構建算法算法選擇性能優良的設備擔任主節點和橋節點,并采取措施控制
    發表于 03-29 11:00 ?14次下載

    WSN中能量有效的連通支配集構建算法

    現有的連通支配集構建算法大多過程復雜、步驟冗余、耗能較多,且不能適應網絡動態拓撲的變化。為此,提出一種能量有效的構建算法。該
    發表于 03-06 17:22 ?1次下載

    OpenHarmony Dev-Board-SIG專場:搭建編譯構建主要步驟

    OpenHarmony Dev-Board-SIG專場:搭建編譯構建主要步驟
    的頭像 發表于 12-28 14:37 ?1098次閱讀
    OpenHarmony Dev-Board-SIG專場:搭建編譯<b class='flag-5'>構建</b>主要<b class='flag-5'>步驟</b>

    TensorRT構建具有動態形狀的引擎的步驟

    動態形狀(Dynamic Shapes)?是延遲指定部分或全部張量維度直到運行時的能力。動態形狀可以通過 C++ 和 Python 接口使用。 以下部分提供了更詳細的信息;但是,這里概述了構建具有動態形狀的引擎的步驟
    的頭像 發表于 05-13 16:40 ?3223次閱讀

    介紹從一組可重用的驗證組件中構建測試平臺所需的步驟

    本文介紹了從一組可重用的驗證組件中構建測試平臺所需的步驟。UVM促進了重用,加速了測試平臺構建的過程。
    的頭像 發表于 06-13 09:11 ?525次閱讀
    介紹從一組可重用的驗證組件中<b class='flag-5'>構建</b>測試平臺所需的<b class='flag-5'>步驟</b>

    可重用的驗證組件中構建測試平臺的步驟

    本文介紹了從一組可重用的驗證組件中構建測試平臺所需的步驟。UVM促進了重用,加速了測試平臺構建的過程。 首先對 測試平臺集成者(testbench integrator) 和 測試編寫者(test
    的頭像 發表于 06-13 09:14 ?641次閱讀
    可重用的驗證組件中<b class='flag-5'>構建</b>測試平臺的<b class='flag-5'>步驟</b>

    EEMD方法的原理與算法實現步驟

    電子發燒友網站提供《EEMD方法的原理與算法實現步驟.pdf》資料免費下載
    發表于 10-23 11:44 ?0次下載
    EEMD方法的原理與<b class='flag-5'>算法</b>實現<b class='flag-5'>步驟</b>

    使用SSR構建React應用的步驟

    使用SSR(Server-Side Rendering,服務器端渲染)構建React應用的步驟通常包括以下幾個階段: 一、項目初始化與配置 創建React項目 : 可以使用Create React
    的頭像 發表于 11-18 11:30 ?390次閱讀
    百家乐策略| 百家乐官网六合彩| 百家乐官网投注网中国体育| 百家乐官网龙虎斗等| 大发888怎么玩能赢| 打百家乐的介绍| e世博百家乐官网攻略| 福鼎市| 现金网游戏| 百家乐bp| 百家乐博欲乐城| 网上百家乐哪里好| 百家乐官网六合彩| e世博 | 威尼斯人娱乐平台博彩投注平| 百家乐官网统计工具| 大发888官方6222.| 东方明珠线上娱乐| 网上百家乐官网看牌器| 手机百家乐官网的玩法技巧和规则| 长乐坊百家乐娱乐城| 大发888手机下载| 宝格丽百家乐官网娱乐城| 娱乐网百家乐官网的玩法技巧和规则| 百家乐百家乐视频游戏世界| 大发888官方pt老虎机大咖炸金花网页扎金花 | 百家乐官网透明发牌机| 中国百家乐澳门真人娱乐平台网址 | 百家乐官网有方式赢钱吗| 百家乐官网资深 | 在线百家乐官网博彩| 百家乐书| 德州扑克哪个平台好| 足球百家乐官网投注计算| 永康百家乐赌博| 博彩e族论坛| 百家乐官网赌博网址| 网上百家乐赌场| 17pk棋牌游戏| 大发888官网充值| 百家乐官网必赢术|