機器學習遠遠超出了sklearn中簡單的fit和predict方法。面試
如今你們都習慣說掉包俠這個詞,尤爲是人工智能領域。個人一個朋友就嘲笑我,說:「你這麼久學會了什麼?只是幾個模型,我一週就學會了。」 那是他的原話。我只是對他微笑,並詢問他學到了什麼。他告訴了幾種機器學習算法的名稱。我問他確切地學到了什麼,而後得出了使用Sklearn的擬合(fit)和預測(predict)方法的明顯答覆,並簡要概述了該算法的工做原理。算法
我臉上露出邪惡的笑容,我問他要如何得到最佳參數?模型如何學習最佳權重?當咱們有低延遲要求時咱們該怎麼辦?儘管這些問題並不複雜,但他坐在那裏靜靜地看着個人臉,我笑到了最後。架構
從故事中得出的結論是,機器學習遠遠超出了簡單的擬合和預測方法。
咱們大多數人只是在bi站上觀看了一些視頻,並聲稱咱們瞭解機器學習,只是很快就意識到了咱們的錯誤。對於全部自學的人來講, 請記住,有成千上萬的人像您和我同樣學習機器學習/數據科學。請記住,咱們將與擁有碩士/博士學位的人競爭。在與數據科學相關的領域。所以,要與他們競爭,咱們必須在基礎方面真正紮實。機器學習
圍繞機器學習的話題不少,新的課程天天都在涌現,目前有比實際工做更多的課程。擁有如此龐大的資源,就出現了選擇正確路線的難題。
坦白地說,這些課程大多數都是平庸的(好比某些營銷號中的廣告),所以不會深刻探討。嗯,那裏沒有好課程,可是每門課程都提供不一樣的課程。不多涉及數學部分,不多擅長於寫代碼部分等等。所以,今天我不會特別說起任何課程。我將分享我在故事中向同一個朋友提出並建議的方法。我相信它也能夠幫助您進行數據科學之旅。函數
建模 是咱們的機器學習算法進入的階段,它只是機器學習生命週期中的重要階段之一。性能
好吧,讓咱們深刻研究機器學習算法的主要主題。學習
對於每種算法,咱們須要注意一些重要的事情。
最初,我曾經學習過一種算法,而且過了一段時間就忘記了,每當我回來修改它時,我都會發現很難理解當時我已經學到的算法。隨着時間的流逝,我意識到,若是人類太過理論化,咱們將沒法真正記住它們;若是經過可視化來學習它,咱們極可能會長時間記住它。這就是幾何幫助咱們以最簡單的方式可視化算法核心的地方。若是咱們對這些算法有一些很酷的現實生活例子,那麼咱們更傾向於更深刻地理解它。優化
一旦從任意選擇的課程中學習了算法,就打開一個新選項卡,而後開始搜索該算法的相關內容。相信我,互聯網上有不少很酷的解釋。對於初學者來講,CSDN和知乎是最好的起點。
一旦瞭解了它的直覺,請嘗試一下並嘗試觀察算法的實際工做原理。您須要檢查的另外一件事是該算法如何處理各類形式的數據,例如文本/類別/數字。人工智能
在此階段中,嘗試多種因素並查看算法的工做原理,您能夠參考Scikit-Learn提供的現有算法。檢查算法的參數,而後嘗試使用它們,看看它們如何影響模型的性能。spa
這是大多數人常常錯過的最重要因素,而他們更多地關注其做用和工做方式。深刻了解該算法很是重要,它爲什麼有效或爲什麼無效。
嘗試實驗並瞭解它如何處理大型數據集和高維數據。若是容易出現異常值或數據集不平衡。
在面試中,最棘手的問題不是什麼(what)和如何(who),而是爲何(why)。 假設明天您在學習算法後建立了一個我的項目,而且使用了特定的X算法來解決它,那麼面試官最有可能問:爲何你要用X算法爲何不用Y算法?換句話說, 爲何您認爲X算法比其餘方法更有效?
好傢伙!這就是爲何您應該知道它在哪裏起做用以及在哪裏不起做用的緣由。
例如,您須要提出相似這樣的答覆:因爲咱們的數據是高維的,而且本質上是非線性的,所以因爲種種緣由,算法X傾向於比Y更好地處理非線性數據。
這是關鍵步驟之一,之因此如此重要,是由於做爲數據科學家,您可能須要向可能徹底沒有技術知識的客戶展現模型。在此期間,您可能須要說服他們他們的模型正在預測正確的結果,而且須要提供一些很好的理由讓他們適應。您根本沒法對它們施加準確性。若是您的算法是可解釋的,那麼您能夠向他們展現模型預測的緣由。可解釋性只不過意味着算法的功能重要性。
例如:若是您正在從事醫療保健項目,則您的模型能夠預測一我的的疾病爲陽性/陰性。這是一個很是敏感的問題,他們沒法承擔可解釋性出現時的錯誤。若是您的模型向您顯示了(由於X特徵(體內某些水平)大於x值之類的緣由),做爲積極/消極的人,這將變得更加容易和有意義。
當咱們進行實時工做時,咱們可能必須處理大量數據,而且若是須要低延遲,那麼時空複雜度能夠幫助您選擇正確的算法。
若是您的模型佔用更多內存,那麼實時運行它會很是昂貴,尤爲是當您使用雲基礎架構來運行模型時。有時,一些業務問題會帶來較低的延遲要求,其中有些算法提供了較高的準確性,但因爲其時間/空間複雜度的限制而沒法知足要求。
百度,CSDN,博客園,知乎,簡書是獲取每種算法的全部這些相關信息的好資源。
再次提到數學?是的,是的,我明白了。即便不瞭解數學,咱們也可使用算法,只需從Sklearn這個庫中導入便可,可是從長遠來看,不建議這樣作。(這就是不少人被稱爲掉包俠的緣由,只會調用庫函數)好吧,不管咱們是否接受,咱們絕對都須要數學以更好地瞭解汽車引擎蓋下的實際狀況。這可能會讓一些人失望,但我獲得一個好消息,咱們沒法避免使用數學運算,但能夠簡化它並避免進行嚴格的數學運算。
簡而言之,大多數機器學習算法的工做是最小化實際輸出與預測輸出之間的差別(LOSS)。
算法=最小化(損失)+正則項
例如,咱們應該將邏輯迴歸的對數損失和SVM等的Hinge損失最小化。
注意:並不是每種機器學習算法都如此,這僅適用於少數算法。
爲了最大程度地減小這種損失,這些算法在內部使用了諸如梯度降低、牛頓法擬牛頓法等等其餘最優化理論。所以,若是您對本身數學不太滿意,那麼只需嘗試瞭解每種算法的損失函數及其梯度降低,就能夠避免全部其餘嚴格的數學運算並保持目標不變。一旦感到本身數學還OK,您就能夠深刻研究更多的數學知識。
一樣,經過從頭複製現有算法來實現它們,咱們能夠更清楚地瞭解現有算法。您將學到一些重要的知識點,能夠幫助您未來創建更好的模型。請記住,因爲某些問題,咱們可能沒法始終在咱們的項目中使用Sklearn中算法的版本。在這種狀況下,您必須準備以知足您要求的方式優化或修改算法。
這提及來容易作起來難,可是要花不少時間才能達到這一點,這就是爲何我將此標記爲可選。至少嘗試實現一種算法以瞭解其實際工做原理。若是您發現很難編寫代碼,請將算法分解爲多個部分,而後先編寫僞代碼,而後再嘗試將其轉換爲實際代碼。(用面向對象的思想去解決問題,把每一個部分當作一個函數或方法看待)
結論:
不要着急,花費本身的時間並儘量最好地學習它,而不是學習一半而後每次都屢次引用它。請記住,目標不是完美,而是堅實的基礎,請相信我,咱們永遠沒法完善目標,老是天天都會變得更好。若是您能理解算法的要旨並瞭解算法的工做原理,那麼從長遠來看,未來的你必定感謝如今努力的本身。(有點像雞湯hhh)
在此過程當中,若是您聽不懂或被卡住,請將其放在一邊,而後繼續進行其餘主題。不要只是堅持下去,浪費您寶貴的時間。稍後以嶄新的心態返回並再次檢查,請相信我,您會感到驚訝。若是您仍然沒法理解某些內容,請搜索其餘資源以更輕鬆的方式對其進行解釋。
最後一步,將您全部的學習應用於不一樣數據類型和大小的多個數據集以得到真正的學習,實踐就是一切。經過作這些事情,您將學到不少東西,而不是簡單的閱讀,因此請準備好動手。
若是您讀了那麼多書,您確定有學習機器學習的熱情,這是學習任何技能的最重要因素。不斷學習,不要放棄。