顯示具有 演算法 標籤的文章。 顯示所有文章
顯示具有 演算法 標籤的文章。 顯示所有文章

2018年7月1日 星期日

機器學習演算法—隨機森林(Random Forest)懶人包

會發這篇文章,主要是因爲前陣子針對研究案期中報告時,整個會場中只有我是寫程式出身的,感受到如果你有再好的技術,如果沒有辦法讓決策者理解,那如何能讓這個計畫推展下去呢?不能去埋怨長官們不懂,他們過去又沒有學過,怎麼可能會懂呢?當然,那種食古不化又不願意聽取專業意見的就另當別論了!

簡單介紹隨機森林(Random Forest)顧名思義,是用隨機的方式建立一個森林。

隨機森林的用途,主要是處理分類與回歸問題,並且在沒有提高運算量的情況下提高了精確度。
優點如下
1.有效的處理缺失值,並且填補缺失值,即使有大量數據缺失仍然可以維持高精確度
2.有效的處理少量資料。
3.對於數據挖掘、檢測離群點和數據可視化非常有用。

缺點
1.在某些雜訊較大的分類和回歸問題上會過擬合(overfitting)

簡單的說,隨機森林可以視為決策樹(Decision Tree)的延伸

什麼是決策樹呢?我們可以想想我們的人生,每做一個決策,就會出現不同的結果,種種不同的決策下,長成了現在的我們,這個分叉出去的人生,就像一棵樹倒過來一樣,用下面這個圖比較明瞭。

決策樹-取自維基百科
而隨機森林呢?可以想像是用隨機的方式建立一個森林,森林裡面有很多的決策樹,而每一棵決策樹之間是沒有關聯,最後再用這些樹去投票,來決定結果。


以下用幾張圖來讓大家簡單明瞭



一般很多的決策樹算法都一個重要的步驟 – 剪枝,但是隨機森林不會。(剪枝的意義是:防止決策樹生成過於龐大的子葉,避免實驗預測結果過擬合,在實際生產中效果很差)

隨機森林裡面的每棵樹的產生的過程中,都已經考慮了避免共線性,避免過擬合,剩下的每棵樹需要做的就是盡可能的在自己所對應的數據(特徵)集情況下盡可能的做到最好的預測結果。



用隨機森林對一個新的對象進行分類判別時,隨機森林中的每一棵樹都會給出自己的分類選擇,並由此進行「投票」,森林整體的輸出結果將會是票數最多的分類選項;而在回歸問題中,隨機森林的輸出將會是所有決策樹輸出的平均值。


以上,希望可以幫助大家快速了解隨機森林及用途,如果有寫得不夠詳細的部分,也歡迎留言討論,最後~希望可以讓長官深入淺出快速理解並支持(?


2018年6月29日 星期五

《AlphaGo-世紀對決》觀後感--至此,人工智慧邁出嶄新的一步


這部片前陣子就看了,現在終於有點時間來寫點東西

應該還有些人記得2016年初那場人機大戰,最後的結果是alphaGO以4:1橫掃人類棋王李世石,人工智慧也再度被炒熱了,一瞬間最難的圍棋也被人工智慧攻克

先來說說圍棋,對弈雙方在棋盤網格的交叉點上交替放置黑色和白色的棋子。落子完畢後,棋子不能移動。對弈過程中圍地吃子,以所圍「地」的大小決定勝負,圍棋被認為是目前世界上最複雜的棋盤遊戲之一。下法千變萬化,因為每顆棋子能選擇的路徑很多,每個下一步有將近兩百種的選擇,即使運用全世界的電腦,運行一百萬年,也難以窮盡它所有的變化方式,所以最簡單的窮舉法(暴力演算法),並無用武之地。

接下來為什麼人工智慧要進場了呢?因為過去算完所有步法後找最佳路徑的窮舉法沒辦法在圍棋上使用,於是Deepmind針對這部份,設計了三個區塊的網路,第一個區塊是使用走棋網路Policy Network,用數以萬計的棋譜去訓練他,讓他習得棋手的招式,第二部分是估值網路Value Network,用來衡量棋局情勢,來判斷棋局目前的獲勝機率,第三個部分是Tree Search,用來分析棋局的各種變化情形,在此是使用蒙地卡羅樹搜尋Monte Carlo tree search。alphaGO的原則是把勝率提升到最大,只要贏就好,不在乎贏多少,搜尋樹概念如下圖。


影片的故事從人工智慧打磚塊遊戲開始,說明機器學習如何進步,與進步是多麼神速,接下來是歐洲圍棋冠軍樊麾與alphaGO對弈,一開始樊麾認為自己可以輕鬆取勝,畢竟在過去還沒有圍棋程式能夠戰勝職業棋手,因為圍棋真的是太複雜了,誰知道卻被5:0橫掃,而在此時此刻,AI的發展正式突破了一個臨界點,在跟alphaGO對弈的過程中,人工智慧就像一面鏡子,透過那面鏡子,棋手看到一個不認識的自己,還有深不可測的實力與棋局,進而開始懷疑自己,在影片後段,李世石在面對alphaGO的第37手時,同樣陷入了困境,各地的評論家也完全看不懂,而事後卻證明,alphaGO看到的遠超乎我們想像。
第二場37move
影片中後段,人類棋王李世石對上AlphaGO,從一開始認為自己能夠輕易取勝,到連敗三場,除了李世石陷入極大的壓力外,觀戰的人類們也同時意識到,面對人工智慧毫不留情的碾壓,在深不可測的AlphaGO面前,人類三千年以來累積的知識與智慧,是那麼的渺小,同時也開始懷疑,我們是不是一直以來都下錯了?所幸後來第四局的時候,李世石出其不意的第78手,讓AlphaGO開始錯亂,最後輸掉了比賽,這時全場歡聲雷動,人類的尊嚴在此重新扳回一成,這一段我看了很感動,當時看比賽直播的時候也有這種感覺,雖然看到韓國人贏好像不是那麼習慣開心!?人類的群體意識在共同抵禦群體時顯示出的共同情感,也許就是讓我感動的原因吧。但是第五場最後還是讓AlphaGO獲勝,也許李世石贏的這一場,會是人類面對AlphaGO唯一贏的一場吧。

除了風光比賽的背後,AlphaGO的團隊也令人印象深刻,在世紀大賽的前三天,大家發現了一個重大的缺陷,卻找不到解決的方法,共同傷腦筋的畫面,以及比賽開始時,李世石下了第一步之後,AlphaGO思考了幾分鐘,那一瞬間,竟是那麼的漫長,可想見當時的團隊開發人員,壓力有多大,如果這時候跳出個系統錯誤之類的,或是畫面藍了,那會有多尷尬!人工智慧可能就瞬間變成笑柄了,所幸,AlphaGO下了第一步,棋局正式展開!

最後想說,一群絕頂聰明又具有共同熱情的人,聚在一起,無比專注、無比努力,只想著要攻克一個問題,問題看似很簡單,但是解決的路途卻又遙遠的看似看不到終點,這個過程,非常令人感動。同時我也非常羨慕,羨慕他們能夠聚在一起,長時間熱情的、專注同一件事,共同努力攻克目標。

看完這部片的時候,想到自己手上的專案,也是在用類似的方式,在朝預測自殺的問題邁進,自殺這件事情存在已久,累計的文獻以及資料堆積如山,但至今卻沒有一個非常有效的方式能夠預測,這就是我想要攻克的目標,雖說目前感覺仍似看不到彼岸,但隨著程式碼持續的改進,與訓練模型,也許終點將不再遙遠。





2018年3月27日 星期二

"培養與鍛鍊程式設計的邏輯腦"讀後感--程式設計大賽的敲門磚

培養與鍛鍊程式設計的邏輯腦
培養與鍛鍊程式設計的邏輯腦


培養與鍛鍊程式設計的邏輯腦的作者是江任捷,同時也是「演算法筆記」版主

演算法真的是一門讓人又愛又恨的學問啊!目前讓我只有恨沒有愛的應該是離散數學......
會讀這本書要感謝清大資工女神駱若瑀(現在是台大資工所的神),是她讓我踏進演算法這個有趣的領域(地獄),在此感謝祝福她能夠順利畢業。
本書提供了基礎的十種演算法,諸如貪婪演算法、窮舉法、遞增遞歸、分治法等,以十個章節分別介紹,每個章節中皆有大量的範例,可以直接讓讀者體會這些演算法的運用方式。以下簡單介紹幾個:
遞增法Incremental Method:一個一個步驟處理問題
記憶法Memoization:預處理,然後儲存計算過的數值,活用電腦裡的每一份資源
窮舉法Enumerative Method:窮舉法有兩個階段,窮舉(列出所有目標),然後搜尋
遞推法Interative Method:運用先前求得的數值,在求新的數值
遞歸法Recursive Method:重複運用相同手法,縮減問題範圍,直到釐清細節
貪婪法 Greedy Method:用投機取巧的手段獲得正確答案,例如填答案及改答案
分治法Divide and Conquer:分割問題,各個擊破


遞歸法
遞歸法

 演算法不只可以用在程式設計,更可以當作解決各種問題的想法,如分治法,是將一個大問題分割成許多小問題,如果小問題還是很難,再繼續分割成更小的問題,分割問題,各個擊破。「凡治眾如治寡,分數是也;鬥眾如鬥寡,形名是也」-孫子。 程式語言不只是死板板的數字,也是一個鍛鍊思維的工具,學程式語言將近十年,無形之中我也練就了良好的邏輯,跟解決問題的能力。只要具備基本的概念,藉由此書,可以讓你的能力更上一層樓。




將探吉帶去日本系列-1(赫曼陸龜Testudo hermanni)

 因為接下來要去日本唸書 所以也要把探吉帶去日本 赫曼陸龜(學名:Testudo hermanni) 目前把北部能查的到的代辦寵物移民的問了一圈 得到的回覆是都沒有代辦陸龜 所以得開始研究自己辦理了 (或者有大大知道台灣誰有代辦陸龜出國的可以私訊我,感恩) 孟恭帶邱口去歐洲那間我...