在當前的人工智能(AI)和機器學習(ML)領域,模型的透明性與可解釋性愈加重要。隨著這些模型廣泛應用於決策過程中,從醫療診斷到金融風險評估,理解模型如何做出決策變得至關重要。SHAP(SHapley 加法解釋)值因此應運而生,旨在滿足這一需求。SHAP 值是一種基於合作博弈論的解釋方法,它將模型的輸出分解為各個特徵的貢獻,幫助用戶更好地理解模型的運行機制。
在當前的人工智能(AI)和機器學習(ML)領域,模型的透明性與可解釋性愈加重要。隨著這些模型廣泛應用於決策過程中,從醫療診斷到金融風險評估,理解模型如何做出決策變得至關重要。SHAP(SHapley 加法解釋)值因此應運而生,旨在滿足這一需求。SHAP 值是一種基於合作博弈論的解釋方法,它將模型的輸出分解為各個特徵的貢獻,幫助用戶更好地理解模型的運行機制。
在數據科學和人工智慧迅速發展的今天,機器學習和統計學已成為各行各業中的重要技能。不過,這些領域的學習資源繁多且分散,對於初學者而言,選擇適合的學習平台和內容至關重要。本文將推薦兩個極具價值的學習資源:吳恩達教授的機器學習課程和YouTube頻道「StatQuest with Josh Starmer」,這些資源將幫助讀者更系統地掌握機器學習和統計學的基礎知識和實踐技能。
一、吳恩達教授的機器學習課程
隨機森林是當今機器學習領域中一種強大的演算法,廣泛應用於資料科學和預測建模。它是一種集成學習方法,通過在大量的決策樹之間進行投票,來執行分類和回歸分析。隨機森林的概念和操作靈活性使其成為資料科學家和機器學習實踐者的首選之一。隨機森林採用了決策樹的優點,如解釋性和穩健性,同時克服了決策樹的過擬合(Over-fitting)問題。它通過隨機選擇特徵和訓練樣本,並將它們組合成強大的分類器或回歸器,建立一系列不同的決策樹。這樣,隨機森林能更好地處理複雜的資料集和高維度特徵。
當研究所寫的文章是要用來投稿時,除了需要提到所使用的軟體以外,另外也要針對軟體的部分加以說明,包含軟體的版本,發行時間,機構名稱,以及城市/國家,因為最近剛好遇到客戶有這方面的需求,所使用的軟體為SPSS與AMOS,我想大家的版本應該都有所不同,因此搜集了一下資料,分享給大家做使用。
首先是SPSS的部分,由於SPSS在2009年時被IBM收購,因此在這之前與之後就會出現兩種格式的分水嶺,在收購前的18版本以前,屬於SPSS公司發行,而19版之後,則是IBM公司發行,以下是IBM官網中所提供引用寫法
下圖是計算出來的結果,分別得到了總和、平均、相加
(4)採用函數加總時最大的問題是不能有遺漏值,否則計算出來的得分會有偏差問題,以6號受訪者來說,五個題項的回答皆為滿意(4分),總分得到20分,7號受訪者前四題皆回答非常滿意(5分),但由於第五題遺漏,被當成0分來計算,使得這兩名受訪者算出來的滿意程度相等,這樣似乎就不合理了,所以有遺漏值的資料就得特別注意;另外還存在一個問題,若今天研究者想要進行構面之間的分數比較或排序時,以加總分數比較就會出現一個明顯的問題,題數越多分數通常會越高,因此當構面的題數不相同時,就無法在同一個基礎點上做比較。為了解決這兩項問題,個人最推薦採用函數平均進行計算
這篇文章想要探討一個容易受到老師挑戰的議題,在問卷調查的研究中,若有使用量表工具來收集受訪者的心理特質時,勢必需要針對每位受訪者的回答項目,幫他們計算一個分數來代表個別的反應程度,那麼計分規則是什麼,通常會在介紹研究工具時一併交代,如下圖所示。
在認識Adaboost演算法之前,我們必須了解機器學習的眾多演算法中,有一個分支是集成式學習(或稱作整體學習),但這裡有一個重要的觀念提醒,集成學習雖然歸屬於機器學習,他是一種「訓練思路」,並不是某種具體的方法或者算法。當我們使用一種分類器無法達到很良好的預測結果時,除了改使用其他類型的分類器,可以將數個分類器的預測結果綜合考慮,藉此達到分類的效果,這即是集成式學習,用白話來說就是「三個臭皮匠勝過一個諸葛亮」的概念。
我們以答一題是非題來舉例,假如我們使用一枚硬幣來決定答案要答O是還是X,此時答對的機率是50%(答錯機率為50%),但如果這時候我們使用兩枚硬幣來決定答案,此時答對的機率是 1-(50%*50%)=75%(答錯機率變為25%),以此類推,當我們硬幣的數目來到 5 枚,答對的機率是 1-(50%)5=96.875%(答錯的機率為3.125%)。隨著硬幣的個數增加,答對這一題是非題的機率也隨之增加(答錯機率也會隨之下降,50%à25%à3.125%),這時候硬幣就是所謂的分類器,把多個分類器的結果作為分類的依據就是集成式學習。集成式學習可分為三個部分,(1) Bagging、(2) Boosting、(3) Stacking。
筆者最近經常會在機器學習的課程中聽到Tensorflow,為了滿足自己的好奇心,就搜尋了一下這個單字,結果發現TensorFlow是一個機器學習框架,如果使用者有非常多的資料就可以透過TensorFlow快速的訓練一個有用的模式(例如:利用類神經網路做文字的辨識)。TensorFlow是一個開源軟體庫(2015年開始使用),用於各種感知和語言理解任務的機器學習。目前被50個團隊用於研究和生產許多Google商業產品,如語音辨識、Gmail、Google 相簿和搜尋,其中許多產品曾使用過其前代軟體DistBelief (2011年開始使用,它是Google推出的第一代內部深度學習框架,能夠幫助Google利用自家的數據中心構建大型的神經網絡)。
筆者最近在學習機器學習的資料降維方法時,有看到一個針對資料做降維的方法,在實務上也非常多人在使用,t-SNE(t-distributed stochastic neighbor embedding,t-隨機鄰近嵌入法),這個方法主要是將高維度的資料進行低維度的轉換,此種降維方式主要是採用非線性的轉換方式,相較於傳統PCA(主成分分析)的降維方式,可以在變數關聯為非線性的關係時能有更好的處理,因為當資料間變項之間的關聯性為非線性時,當使用PCA(主成分分析)這種把資料當成線性關係去處理的時候,就容易產生模型underfitting的情況(白話來說,就是這個模型不適合用來解釋手上的資料,容易產生錯誤的結果)。那t-SNE是如何解釋資料非線性的關係呢,筆者這邊稍微帶一點數學公式,讓讀者可以簡單了解這個方法的理論,如下有A跟B兩個公式,A公式是一個常態分佈的公式,t-SNE將原始資料(高維度的資料)利用常態分佈來去解釋;B公式則是一個自由度為1的t分佈公式,t-SNE將降維後的資料(低維度的資料)利用t分佈來去解釋,利用t分佈去解釋,當原始資料裡面有異常值時,降維後的資料不容易受影響,t分佈在樣本數小的時候,也比較好用來描繪母體的資料,而且因為t分佈的雙尾較寬,因此也可以避免低維度的資料全部擠在一起,無法有效的被分群。因為如果用傳統PCA的方式,容易產生數據的集群混在一起,無法有效的區隔,這樣的狀況其實也代表降維後的資料無法有效的表現原始資料的樣子跟分佈情形。
筆者在學習機器學習以及統計學的相關知識的過程中,有在網路搜尋了許多相關學習資源,想跟各位讀者分享一個我在Youtube平台上面找到值得大家多去看看的頻道,這個頻道叫做「StatQuest with Josh Starmer」,這個頻道的
在機器學習領域中,經常會需要針對高維度的資料進行降維,首先,我們先來簡單了解一下,為什麼資料需要做”降維”,降維是指在某些限定條件下,降低隨機變量(資料的變項)個數,得到一組「不相關」主變量的過程(根據維基百科的說明),基本上降維可分為兩個目的,”變數選擇”以及”特徵提取”,因為研究者的資料通常包含了許多多餘或不重要的資訊(這些東西又可被稱為雜訊,如果不特別處理的話可能會對之後分析資料產生不良的影響),”變數選擇”的概念其實簡單來說就是從資料當中得到哪些是對於研究標的是重要的變項,”特徵提取”是指透過某些方法把資料當中有用的變項做一個組合,但其實兩者的目的都是想針對資料做一個純化的動作(白話來說就是找資料裡面的重點),讓之後的統計分析可以更加的準確。降維除了是想避免雜訊外,其實還有一個更重要的目的,那就是為了避免「維度災難,curse of dimensionality」這件事,維度災難最早是用於描述當(數學)空間維度增加時,分析和組織高維空間(通常有成百上千維),因體積指數增加而遇到各種問題場景。如果將此情境套用在統計學是指當維數提高時,空間的體積提高太快,可用數據因此變得很稀疏(樣本數不足的意思)。稀疏性對於任何要求有統計學意義的方法而言都是一個問題,那為了滿足統計學方法以得到可靠的結果,我們只能去增加資料的數量來去避免維度災難的問題,但當我們的資料無法持續增加時,就只能透過替資料降維的方式來避免稀疏性。
下圖是指維度增加到一個程度時,分類模型的分類能力會開始隨維度的增加而下降的過程。
一般來說機器學習大致可以分為以下幾種類型:監督式學習(Supervised learning)、非監督式學習(Un-supervised learning)、半監督式學習(Semi-supervised learning)及強化學習(Reinforcement learning)。
本次筆者先從監督式學習(概念就是產生一個預測模式)開始介紹監督式學習(Supervised learning)à目的在於預測(基於使用者手上已經有每一個人目標變數的答案)
筆者在之前的文章(機器學習-Bias-Variance Tradeoff)有提到處理Overfitting的方式可透過Ridge regression, Lasso regression來去處理,本次文章主要會簡介這兩種方法的差別
一、Lasso regression
筆者最近在coursera這個線上學習平台學習機器學習的課程,在機器學習實作的練習中,有用到一個Octave語言,想跟各位讀者分享,Octave是一種採用進階程式語言,主要用於數值分析的軟體,可用於解決線性和非線性問題,Octave語言其實可以把它當作MATLAB語言的替代版本,很多功能都跟MATLAB類似,但相較於MATLAB主要有幾個優點:
稍微介紹了一下Octave後,來介紹一下Octave的實際操作,當我們透過Octave的網頁下載程式後,安裝完成後,打開後會出現以下的畫面,跟Windows內建的命令視窗類似。
在機器學習中,研究者希望產生的模型可以「準確」地去描述資料背後的模式,但怎樣才算是準確呢?「準確」可分為兩部分,準指的是偏差(Bias)小,確指的是變異(variance)小,研究者總是希望模型可以同時偏差小、變異小,但現實總是殘酷的,如下圖所示,因為模式的整體誤差(Total error)=偏差(Bias )2+變異(variance)+隨機誤差(random error),由於隨機誤差無法做調整(數據本身的誤差),在模式整體誤差是固定的時候,為了降低偏差使模式複雜度(Model complexity)增加時,變異也會隨之增大,反之,為了降低變異使模式複雜度(Model complexity)降低時,偏差也會隨之增大,因此追求模型偏差以及變異最小是機器學習領域非常重要的課題之一。
筆者最近開始在學習人工智慧當中的分支-「機器學習」,有一些學習心得想跟各位讀者分享,如圖一所示,其實人工智慧包含了機器學習(Machine learning)及深度學習(Deep learning)的內容,其實人工智慧的目的在於如何讓事物變得更聰明,能有效展現人類的智慧,在這過程中,我們會需要讓事物記憶各種情境(給予事物資料),並加以透過演算法(機器學習、深度學習)使事物能學習這些內容,並加以判斷在各種情境下該做如何的處理,舉例來說:為了讓你家的大門能去辨別「人」跟「老鼠」的差別,人可以進入你家但老鼠不行,在這過程中的一開始,為了要讓你家大門知道甚麼是老鼠、甚麼是人,你一定會讓大門開始去紀錄一堆人跟一堆老鼠的照片或相關可供辨別的資訊,讓大門能開始區分人跟老鼠的差異,最終你會希望你家大門下次遇到老鼠的時候能辨別這是老鼠,不可以進入你家,但當你阿姨的表弟的鄰居來你家的時候,大門能讓那他進來,不會出現人與老鼠都可進入或不可進入的情況。在上述的例子中,在訓練你家大門的過程中,一定有機會出現人與老鼠都可進入或不可進入的狀況,因為就像人類在學習新東西的時候總是會有出錯的可能,既然是要訓練事物模擬人類學習的過程,這樣出錯的機會當然也會存在,甚至會比人類的出現的錯誤還要更多,因為人類在學習新東西的過程,不是只是單純透過過往的資料(老鼠和人的圖片)和經驗中學習並找到其運行規則(機器學習的概念),人類的學習可以透過與其他經驗的連結來加強目前學習的成效,例如你學會了辨別人與老鼠,那這樣的學習經驗能否套用在辨別其他物體上(人與貓的差別),機器學習可能只能做到讓事物從已知的資訊(人類找到的特徵)來去預測,但深度學習能讓事物從已知的資訊中去產生人類沒找到的關鍵特徵來去得到更精準的預測,所以機器學習被視為是弱的人工(工人)智慧,而深度學習則是透過機器學習的技術達到更接近人工智慧的技術,兩者是相符相乘的,最終的目的都是希望事物能達到真正的人工(人類)智慧。
圖二說明了機器學習與深度學習的不同,兩者差別在於機器學習把學習過程把特徵擷取跟分類技術分成兩步驟,開發者必須先透過資料找到能預測output可能的特徵(人為尋找),進而透過分類技術來去預測;深度學習則是將這兩步驟同時進行,讓機器可以自動化的從資料擷取與output有關的特徵(機器尋找),透過分類技術來去預測output。如果把機器學習跟深度學習比喻成兩種人(一般人跟天才),機器學習就是一般人,一件事的完成會先拆成好幾個部分,各別完成後再組合再一起,但深度學習則是天才,一件事情可以直接從頭做到尾,中間原本應該要分開完成的過程可以直接一步到位,而且最後的成果甚至還比機器學習更好,因為天才總是可以想到一般人所沒有想到的東西,能更完美的達成任務。
筆者最近在整理自己工作上寫的程式遇到了一個問題,一般人在整理電腦檔案的時候(筆者平常的習慣),可能會用日期加上做了甚麼事作為檔案的名稱,例如:20191114資料處理,雖然這樣的整理可以讓使用者區別不同檔案的製作時間跟做了哪些東西,但隨著時間,資料夾的檔案可能會越來越多,難保使用者經過一段時間再打開這個資料夾的檔案的時候,有辦法能快速回憶所寫程式的一切(包含中間改了哪些內容),因為有些時候我們只是修改了部分的程式碼(可能是只是測試一個小功能),有時候因為方便,可能沒有另存一個新的檔案,而是覆蓋原有的檔案,這樣事後在回顧自己寫的程式時可能會有一些前後不一致的狀況,因此單靠檔案的命名整理檔案似乎不太可行(至少對筆者來說),因此如果有一個工具能幫使用者記錄寫程式的過程中,做了哪些事,以及能讓使用者任意回到之前或之後的版本,還有最重要的一點,如果使用者可以不需要存一堆檔案,只需要維持一個檔案,原本筆者認為應該沒有那麼好康的事情,但就在最近筆者開始接觸了Git這個好用的東西。
Git是一個版本控制系統(Version Control System),何謂版本控制,維基百科給的說明是,版本控制是一種軟體工程技巧,藉此能在軟體開發的過程中,確保由不同人所編輯的同一程式檔案都得到同步,如下圖所示,筆者電腦裡有一個專案的資料夾,隨著時間的變化,一開始這個資料夾裡只有3個檔案(綠色圈圈),過兩天增加到5個(綠色圈圈)。不久之後,其中的2個(綠色方框)被修改了,過了三個月後又增加到7個,最後又刪除了1個,變成6個。每一個「檔案的狀態變化」,不管是新增或刪除檔案,亦或是檔案內容的修改,都被視為一個「版本」。「版本控制系統」的功用就是會幫使用者記錄這些所有的狀態變化,並且可以像搭乘時光機一樣,任意切換到不同時間的版本。一個人從頭做到尾,如果檔案整理得好,也許真的都能知道開發的過程中做的所有事,但實務上開發程式經常是多人開發的,需要大家共同編輯程式,在這種情況下,由於大家未必都在同個時間去修改程式,這樣就會產生一個問題,例如,工程師A改了某個部分,工程師B可能也在其他時間改了某個部分,甚至有可能兩個工程師在同個時間修改同一份檔案,如果只是單純存取不同檔案來去管理,難保最後再匯總程式的時候,會出現到底哪一個檔案才是最新的內容的疑問。
筆者這次將利用Joinpoint軟體官方提供的資料,來介紹Joinpoint軟體的操作與需要注意的細節(主要針對筆者在學習過程中所遇到的狀況),Joinpint軟體的操作可分為四個區塊:
操作步驟 |