1. 程式人生 > >基於C#的機器學習--機器學習的基本知識

基於C#的機器學習--機器學習的基本知識

機器學習的基本知識

       作為一個終生的微軟開發人員,我經常看到開發人員努力尋找解決日常問題所需的資源。讓我們面對現實吧,我們沒有人有時間按照自己喜歡的方式做事,我們中很少有人有幸在真正的研發部門工作。雖然這些年來我們已經走過了相當長的一段旅程,還記得曾經我們通過桌上的C程式設計師參考資料和其他50本書中翻找資料,到現在能夠在谷歌中快速搜尋並得到我們想要的東西。但現在人工智慧時代已經到來,情況有些不同了。

       作為c#開發人員,當涉及到機器學習時,谷歌搜尋並不總是我們最好的朋友,因為幾乎所有正在使用的東西都是

Python, R, MATLABOctave。我們還必須記住,機器學習已經存在很多年了; 只是在最近,美國的企業已經接受了它,我們看到越來越多的人蔘與其中。

       但是,我的朋友們,毫無疑問,這個世界是一個可怕的地方!c# .NET開發人員該何去何從? 讓我們在下一節開始用一個小故事來回答這個問題,不幸的是,這個故事是千真萬確的。

        在本章中,我們將學習以下主題:

               資料探勘技術(即指從資料中發掘資訊或知識)

               是購買、構建還是開源

               強化學習

               無監督學習

               監督式學習

               概率和統計

               深度學習

               人工智慧(AI)和生物人工智慧

機器學習概論

       我曾經有一個老闆,我告訴他我正在使用機器學習來發現更多關於我們資料的資訊。他的回答是:“你認為你能學到什麼,我不知道!” 如果你在職業生涯中還沒有遇到這樣的情況,那麼恭喜你。如果你有任何職位空缺請告訴我!但你很可能會遇到或者已經遇到了。如果是你你會如何處理呢?而我並沒有因此放棄這件事。

       我:“我們的目標是瞭解更多關於我們所擁有的基金的資訊和細節,以及它們如何與使用者的實際情況進行關聯的。

       Boss:“但這些我都知道。機器學習只是一個時髦的詞,它最終都是資料,我們都只是資料管理員。其餘的都是流行語。我們為什麼要這樣做,它最終將如何幫助我。

       我:“我來問你。當你在谷歌中輸入搜尋時,你認為會發生什麼?

       Boss看起來有些憤怒。

       Boss:“你想表達什麼?Google當然是拿著我的輸入的內容在網路中尋找與之相似的東西。”

我:“好,那這是怎麼做的呢?”

Boss看起來更憤怒以及有些沮喪。

       Boss:“很顯然它會先在網路中進行搜尋,然後將我的輸入和它的搜尋結果進行比對。”

我:“但是你有沒有想過這個搜尋是如何在其他數十億個搜尋中匹配的,以及搜尋背後的所有資料是如何不斷更新的?很明顯,人們不能參與其中,否則就無法擴大規模。

       Boss:“當然,演算法經過了很好的調整,給出了我們正在尋找的結果,或者至少給出了建議。

我:“沒錯,正是機器學習做到了這一點。 (不一定,但足夠接近!)

       Boss:“好吧,我不知道我還能從這些資料中學到什麼所以讓我們看看它是怎樣的。

       所以,讓我們做誠實的人。有時候,再多的邏輯也無法覆蓋盲目或抗拒改變的心理,但這個故事的背後,有著與一個無視我們在生物學中所學到的一切的老闆截然不同、更為重要的意義。在機器學習的世界裡,要想向那些不像你一樣每天都在開發戰壕裡的人證明/展示正在發生的事情、事情是否在工作、它們如何工作、它們為什麼(或為什麼不)工作,等等要難得多。即使那樣,你也很難理解這個演算法在做什麼。

       以下是你在決定機器學習是否適合你時應該問自己的一些問題:

              你只是想順應流行(這可能是真正需要的),還是真的需要這種型別的解決方案?

              你有你需要的資料嗎?

              資料是否足夠清晰以供使用(稍後將詳細介紹)?

              您知道在哪裡以及是否可以獲得可能丟失的資料嗎?更重要的是,您如何知道資料實際上是丟失的?

              你有很多資料還是隻有少量資料?

              有沒有另一種已知且經過驗證的解決方案,我們可以用它來代替?

              你知道你想要完成什麼嗎?

              你知道你將如何完成它嗎?

              你將如何向別人解釋?

              當被問到這個問題的時候,你如何能夠證明在幕後發生了什麼?

       這些只是我們在開始機器學習之旅時將共同解決的許多問題中的一部分。

       現在,如果有人能夠執行一個返回多行資料的SQL查詢,他們似乎將稱自己為資料科學家。對於簡歷來說這足夠公平;每個人偶爾都需要鼓勵一下,即使是自己提供的。但他們真的是資料科學家嗎?資料科學家到底是什麼意思?我們真的在做機器學習嗎?這到底意味著什麼?好吧,到這本書的結尾,我們希望能找到所有這些問題的答案,或者至少,創造一個你可以自己找到答案的環境。

       並不是所有人都能在奢華的研究或學術領域工作。我們許多人每天都火要救,正確的解決方案可能只是一個戰術解決方案,必須在2小時內解決。這就是我們c#開發人員所做的。我們整天坐在桌子後面,運氣好的話戴上耳機,不停地打字。但是我們真的能得到我們想要的或者需要的全部時間來按照我們想要的方式開發一個專案嗎?如果我們這樣做了,我們的專案中就不會有我們現在所擁有的那麼多技術債務了,對嗎(您確實跟蹤了您的技術債務,對嗎) ?

       我們需要思考如何才能避免走彎路,有時我們通過思考而不是編碼來做到這一點,尤其是在前期。知識是無價的,因為知識是無法被替代的。但在美國企業中,大多數生產程式碼都不是用PythonRMatlabOctave等學術語言編寫的。即使所有的學術財富都是可以得到的,但它們並不是以最適合我們工作的形式得到的。

       在此,讓我們停下來,讚美那些為開源社群做出貢獻的人。正因為有了它們,我們才有了一些優秀的第三方開源解決方案,我們可以利用它們來完成這項工作。開源社群允許我們利用他們所開發的東西,這本書的目的是讓你瞭解其中的一些工具並展示如何使用它們。在這個過程中,我們會試著至少給你們一些你們應該知道的基本的背景知識,這樣一切就不是黑洞對黑盒了!

       你到處都能聽到流行語。我以前每天上下班要花2-4個小時,我不記得我看到過多少廣告牌上面寫著機器學習或人工智慧。它們無處不在,但這一切到底意味著什麼? 人工智慧,機器學習,資料科學,自然語言處理(NLP),資料探勘,神經元。似乎只要美國公司參與進來,似乎一旦美國企業參與進來,這門曾經完美的藝術就變成了一場混亂的混戰,一項完全不切實際的微觀管理專案。我甚至聽到一位潛在客戶說,我不知道這意味著什麼,但我就是不想被落在後面!

       我們必須做的第一件事是學習處理機器學習專案的正確方法。讓我們從一些定義開始:

       Tom Mitchell將機器學習定義為:

       "A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P if its performance at tasks in T, as measured by P, improves with experience E."

       我們的定義會有一點不同。希望當你被要求為你選擇的道路辯護時,你可以使用它:

       "Machine learning is a collection of techniques which can be used to deal with large amounts of data in the most efficient and effective manner possible, which will derive actionable results and insight for us from that data."

       “機器學習是一組技術的集合,可以用來以最有效的方式處理大量資料,這將為我們從這些資料中獲得可操作的結果和洞察力。

       現在,那些我們稱之為技術的東西呢? 毫無疑問;諸如概率,統計等技術,它們都在那裡,只是被隱藏起來了。我們將要用來執行示例的工具將隱藏細節,就像PythonR和其他工具一樣!話雖這麼說,如果我們沒有至少讓您瞭解一些基本知識,這將是對您的一種傷害,我們稍後將介紹這些基本知識。我並不是要降低它們的重要性因為它們都是同等重要的,但是我們的目標是讓所有的c#開發人員儘可能快地啟動和執行。我們將為您提供足夠的資訊,使您的buzzword符合規範,然後您將瞭解更多,而不僅僅是封裝好的黑盒API呼叫! 我鼓勵你們每個人在這個領域儘可能多地追求學術知識。機器學習和人工智慧似乎每天都在變化,所以要時刻跟上最新的發展。你知道的越多,你的專案就越容易被接受。

       既然我們提出了buzzword相容的主題,讓我們從一開始就清理一些術語。資料探勘,機器學習,人工智慧,等等。我現在只講幾個術語,但是這裡有一個簡單的方法。

       你和家人在公路上旅行。讓我們假設你有孩子,讓我們把“我們還在嗎的對話放在一邊! 你和你的一個孩子在高速公路上開車(一個很小的蹣跚學步的孩子),你的孩子指著窗外的一輛卡車大喊卡車。這個孩子還很小,所以他是怎麼知道那輛車是卡車的(讓我們假設它真的是卡車!)他們知道這是一輛卡車,因為每次他們做同樣的事情,你說不是。這是機器學習。然後,當你告訴他們是或不是,那就是強化學習。如果你說是的話,那是一輛大卡車,它會給強化過程增加背景,讓我們沿著這條路深入學習。看看你教給你的孩子什麼是甚至你都不知道的。


資料探勘

       資料探勘處理的是為非常具體的資訊搜尋大量的資料。您正在資料中搜索特定的內容。例如,信用卡公司將使用資料探勘,通過分析購買行為和購買地點來了解購買者的習慣。這些資訊對諸如目標廣告之類的東西非常有用。

       另一方面,機器學習側重於使用您提供的演算法搜尋資料的實際任務。有道理嗎?

       這裡有一個很好的連結,您可以在這裡學習更多關於資料探勘的知識: https:/​/​blog.​udacity.​com/​2014/​12/​24-​data-​science-​resources-​keep-​fingerpulse.​html

人工智慧

       人工智慧是機器學習的一個更高層次。有些人把它定義為機器看起來和人類一樣聰明或比人類聰明。對我來說,這個問題還沒有定論。我每天看的新聞越多,我就越想知道到底哪種智慧是人工的,就這一點而言,什麼才是真正的智慧!關於人工智慧的定義有很多,但簡而言之,人工智慧被認為是一種機器,它所做的事情是人類能夠或應該做的,以至於任何理性的人都無法在反應上區分機器和人類。無論如何,人工智慧是一個影響深遠的主題,不幸的是,它的含義和人們使用這個術語的含義一樣多。

生物-AI

       生物-AI指的是將一個生物元件與一個計算元件放在一起。基因型,表現型,神經元,映象神經元,典型神經元,突觸你會聽到在這個類別下所有提到的,人工神經網路(ANNs)!生物人工智慧主要應用於醫學領域。現在,我們不需要關心這個問題,只需要知道這個術語的存在,以及生物學是它的構成的基礎。

深度學習

       多年來,人們認為神經網路(使用一種稱為隱藏層的概念)只需要一個隱藏層就可以解決任何問題。隨著計算能力的提高,計算硬體成本的降低,以及神經網路演算法的進步,在您的網路中有數百甚至數千個隱藏層是很常見的。隱藏層的數量的增加,以及其他一些東西,簡單來說就是什麼是深度學習!這裡有一個直觀的比較,可能有助於讓事情變得更清楚:

                                                          

       如下圖所示,網路中有幾個隱藏的層

                                         

概率與統計

       信不信由你,這就是你正在做的;它是從你的觀點中很好地抽象出來的。但是讓我給你一個難以置信的,過度簡化的,快速入門以防你被繞暈了。

       你看見一隻北極熊在雪地裡走。你想知道它會留下什麼樣的腳印。這是概率。接下來,你看到雪地上的腳印,想知道這是不是北極熊。這是統計資料。再舉一個例子以防萬一:

  1. 概率是指預測未來事件發生的可能性。
  2. 統計資料用於分析過去事件的頻率

開始你的機器學習專案

       接下來,讓我們談談我們將如何處理我們的機器學習專案,在此過程中,繼續定義/改進我們的機器學習心態。讓我們從定義每次處理這些專案時需要使用的基本步驟開始。基本上,我們可以把它們分成以下幾類。

資料收集

       有無數型別的資料可供您使用,從SQLNoSQL資料庫、Excel檔案、Access資料庫、文字檔案等等。您需要決定資料位於何處、如何格式化資料、如何匯入和細化資料。您需要始終記住,大量的測試和培訓資料以及它們的質量是無法替代的。在機器學習中,無用輸入和無用輸出會變得非常混亂

資料準備

如前所述,資料質量是無可替代的。是否有丟失、畸形或不正確的資料?我們不要忘記另一個你們可能熟悉的術語,資料離群值。這些討厭的小資料片段根本不適合您的其他資料!你有嗎?如果是,他們應該在那裡嗎?如果是,他們將如何處理?如果您不確定,下面是在繪製資料時資料離群值的樣子:

                                      

在統計學中,離群值是一個觀測點,它與其他觀測點之間的距離很遠,有時非常遠,有時不太遠。異常值本身可能是由於測量的可變性導致的,這表明了實驗存在缺陷,或者它實際上可能是有效的。如果您在資料中看到異常值,您需要了解原因。它們可以指示某種形式的測量誤差,而您使用的演算法可能不夠健壯,無法處理這些異常值。

選擇與訓練模型

       在建立和訓練模型時,需要考慮以下幾點。

  1. 您需要為手頭的任務選擇適當的機器學習演算法,它將代表您正在處理的資料。然後將其分成2-3組資料:培訓、驗證和測試。正確比例的規則根據您處理的資料量的不同而不同。例如,如果您有10,000行資料,那麼20%到培訓和80%到測試可能是好的。但是如果您有108行資料,那麼5%的訓練和95%的測試可能更好。
  2. 有一條規則你必須嚴格遵守。無論您決定為您的測試、訓練和驗證集使用什麼分數,所有的資料都必須來自相同的資料集。這是非常重要的。您永遠不希望從一個數據集中獲取一些資料來進行訓練,然後從另一個完全不同的資料集中獲取資料來進行測試。這隻會導致失望。
  3. 總是積累大量的資料集來訓練、測試和驗證。
  4. 驗證資料可用於在使用測試資料集之前驗證您的測試資料。有些人使用它,有些人不使用它。無論您如何分割資料,您總是有一個要訓練的資料集和一個要測試的資料集。您的演算法的目標必須是足夠靈活地處理它以前沒有見過的資料,如果您使用開發時使用的同一組資料進行測試,則無法做到這一點。以下是可以拆分資料的兩種方法。這兩種方法展示瞭如何分離測試和訓練集(一個帶有交叉驗證集,另一個沒有)

評估模型

       一旦您使用了您的訓練資料,您將繼續使用您之前準備的測試資料集來測試/評估您的模型。在這裡,我們可以發現我們的模型是如何根據它以前沒有看到的資料工作的。如果我們的模型在這裡失敗了,我們將返回到開始的地方,並改進我們的流程。

調教模型

當您在評估您的模型時,您可能在某個時候決定您需要選擇一個不同的模型,或者引入更多的特性/變數/超引數來提高模型的效率和效能。減少暴露的一個好方法是在資料收集部分和資料準備部分花費額外的時間。正如我們前面所說,大量正確的資料是無可替代的。

鳶尾花資料集

       鳶尾花資料集是生物學家Ronald Fisher先生於1936年介紹的花卉資料集。此資料集包含了3種鳶尾花(鳶尾花,鳶尾花,鳶尾花色)50個樣本。每個樣本包括四個特徵(萼片的長度,花瓣的長度,萼片的寬度,花瓣的寬度)。結合這些資料,就可以得到一個線性判別模型來區分不同的物種。

那麼,我們如何從花到資料:

           

我們現在需要把我們所知道的花的視覺表現形式轉化成計算機可以理解的東西。我們將花的所有資訊分解為列(特徵)和行(資料項),如下所示:

             

既然所有的測量資料都是計算機能夠理解的格式,我們的第一步應該是確保我們沒有丟失或畸形的資料,因為這會帶來麻煩。如果您檢視前面螢幕截圖中的黃色高亮部分,您可以看到我們丟失了一些資料。我們需要確保在將其提交給應用程式之前填充了它。一旦正確地準備和驗證了資料,我們就可以開始了。如果我們從Encog34執行Iris驗證器,我們的輸出應該反映出我們有150個數據集,它確實有:

                                

機器學習中的分類

現在,讓我們簡要地熟悉一下我們將在整本書中討論的不同型別的機器學習,重要的是你至少要熟悉這些術語,因為它們總有一天會出現,你知道的和理解的越多,你就能更好地處理你的問題並向別人解釋它。

下面是一個簡單的圖表,展示了機器學習的三個主要類別:

監督式學習

       這些型別的機器學習模型被用來根據提供給它的資料預測結果。所提供的說明是明確和詳細的,或者至少應該是明確和詳細的,這是獲得所監督的標籤的原因。我們基本上是在學習一個基於輸入和輸出對將輸入對映到輸出的函式。這個函式是從被稱為標記的訓練資料中推斷出來的,因為它明確地告訴這個函式它期望什麼。在監督學習中,總是有一個輸入和相應的輸出(或者更準確地說,是一個期望的輸出值)。更正式地說,這類演算法使用一種稱為歸納偏差的技術來實現這一點,這基本上意味著演算法將使用一組假設來預測給定輸入的輸出,這些輸入可能是它以前見過的,也可能不是。

       在監督學習中,我們通常可以訪問一組X特徵(X1, X2, X3…)Xx),用觀測值來測量,響應Y,也用同樣的n個觀測值來測量。然後我們試著用X1,X2, X3…Xn來預測Y

       支援向量機(SVM)、線性迴歸、樸素貝葉斯和基於樹的方法等模型只是監督學習的幾個範例。

       接下來,讓我們簡要討論一下在有監督學習中我們需要關注的一些事情。它們沒有特定的順序。

  1. 偏見方差的權衡
  2. 資料的多樣性
  3. 不正確的輸出值
  4. 輸入空間維數
  5. 培訓資料量

偏差及方差的權衡

       在討論偏差-方差權衡之前,我們首先要確保您熟悉各個術語本身。      

       當我們討論偏差-方差權衡時,偏差指的是學習演算法中由於不正確的假設而產生的錯誤。高偏差會導致所謂的欠擬合現象,這種現象會導致演算法遺漏資料中相關的特徵-輸出層關係

       另一方面,方差是對訓練集中的小波動的敏感誤差。高方差會導致演算法模擬隨機噪聲,而不是實際的預期輸出,這種現象稱為過擬合。

       每個機器學習開發人員都需要理解偏差和方差之間的平衡。它與資料的過擬合和過擬合有直接關係。我們說,如果一個學習演算法在不同的訓練集中預測不同的輸出結果,那麼它對輸入的方差很大,這當然不好。

       低偏差的機器學習演算法必須足夠靈活,才能很好地適應資料。但是,如果演算法設計過於靈活,每個訓練和測試資料集的擬合就會不一樣,導致方差很大。

       然而您的演算法又必須足夠靈活,那麼你可以通過固有的演算法知識或可由使用者調整的引數來調整這種權衡。

       下圖顯示了一個具有高偏差(左側)的簡單模型和一個具有高方差(右側)的更復雜模型。

訓練的資料量

       正如我們反覆說過的,沒有什麼可以替代足夠的資料來正確和完整地完成這項工作。這與學習演算法的複雜性直接相關。一個低偏差、低方差的簡單演算法可以從更少的資料中獲得更好的學習效果。然而,如果您的學習演算法很複雜(許多輸入特性、引數等),那麼您將需要一個更大的訓練集,在低偏差和高方差的情況下進行學習。

輸入空間維數

       對於每一個學習問題我們的輸入都是向量的形式。特徵向量,即資料本身的特徵,這對演算法的影響很大。如果輸入的特徵向量非常大,也就是所謂的高維性,那麼即使只需要其中的幾個特徵,學習起來也會更加困難。有時,額外的維度會混淆您的學習演算法,從而導致高方差。反過來,這意味著您必須優化演算法,使其具有更低的方差和更高的偏差。如果適用的話,從資料中刪除額外的特性有時會更容易提高學習方法的準確性。

       也就是說,一些機器學習演算法使用了一種稱為降維的流行技術。這些演算法將識別和刪除不相關的特徵。

不正確的輸出值

       我們在這裡需要問自己的是,機器學習演算法的期望輸出中存在多少錯誤。學習演算法可能會試圖將資料擬合得太好,從而導致我們前面提到的過擬合。過度擬合可能是由於不正確的資料,或學習演算法過於複雜,無法完成手頭的任務。如果出現這種情況,我們需要調整演算法,或者尋找一個偏差更大、方差更小的演算法。

資料的多樣性

       資料的多樣性意味著特徵向量包含許多不同種類的特徵。如果這適用於我們的應用程式,那麼我們最好為任務應用不同的學習演算法。一些學習演算法還要求我們的資料被縮放以適應特定的範圍,如[0 -1][-1 -1]等。當我們學習以距離函式為基礎的演算法時,比如最近鄰居法和支援向量法,你會發現它們對這個非常敏感。另一方面,基於樹的演算法(決策樹等)可以很好地處理這種現象。

       我們應該始終從最簡單、最合適的演算法開始,並確保正確地收集和準備我們的資料。從這裡開始,我們可以嘗試不同的學習演算法,並對它們進行優化,看看哪種演算法最適合我們的情況。毫無疑問,優化演算法可能不是一項簡單的任務,並且最終會消耗比我們可用的時間多得多的時間。總是首先確保有適當數量的資料可用

無監督式學習

       與監督學習相反,在如何確定結果方面,非監督學習通常有更多的靈活性。對於演算法來說,資料的處理使得資料集中沒有任何一個特徵比其他特徵更重要。這些演算法從輸入資料的資料集學習,而不需要標記期望的輸出資料。k均值聚類(聚類分析)是無監督模型的一個例子。它非常善於在資料中找到與輸入資料相關的有意義的模式。我們在監督部分所學到的和這裡的最大區別是我們現在有了x的特徵X1 X2 X3n個觀測值測量。但我們不再對Y的預測感興趣,因為我們不再有Y了,我們唯一感興趣的是在已有的特徵上發現數據模式

                         

       在前面的圖中,我們可以看到這樣的資料本身更適合於非線性方法,在這種方法中,資料似乎是按重要性分組的。它是非線性的,因為我們無法得到一條直線來準確地分離和分類資料。無監督學習允許我們在幾乎不知道結果會是什麼或應該是什麼的情況下解決問題。結構來自於資料本身,而不是應用於輸出標籤的監督規則。這種結構通常由資料的聚類關係匯出。

       例如,假設我們有許多個基因來自我們的基因組資料科學實驗。我們希望將這些資料分組為類似的片段,如頭髮顏色、壽命、體重等等。

       第二個例子是眾所周知的酒會效應,它基本上指的是大腦能夠將注意力集中到一件事上,並過濾掉周圍的噪音。

       這兩個示例都可以使用叢集來實現它們的目標。

強化學習

       強化學習是一種機器被訓練為一個特定的結果,唯一的目的是最大化的效率和/或效能。該演算法因做出正確的決策而得到獎勵,因做出錯誤的決策而受到懲罰。持續的訓練是為了不斷提高績效。持續的學習過程意味著更少的人為干預。馬爾可夫模型是強化學習的一個例子,自動駕駛汽車就是這樣一個應用的很好的例子。它不斷地與環境進行互動,監視障礙物、速度限制、距離、行人等等,以便(希望如此)做出正確的決策。

       我們與強化學習最大的不同是我們沒有處理正確的輸入和輸出資料。這裡的重點是效能,這意味著需要在看不見的資料和演算法已經學過的東西之間找到一種平衡。

       演算法將一個動作應用到它的環境中,根據它所做的、重複的等行為接受獎勵或懲罰,如下圖所示。你可以想象一下每秒有多少次這種情況發生在剛剛在酒店接你的自動駕駛出租車上。

                                                    

構建、購買或開源

       接下來,讓我們問自己一個非常重要的問題。我們是需要購買、構建還是使用開源?

       接觸開源世界,這是我的建議,當然也是我寫這本書的原因之一。我意識到許多開發人員都有它不是在這裡構建的綜合症,但是在走上這條道路之前,我們應該對自己誠實。我們真的認為我們有能力做得更好、更快、在我們的時間限制內進行測試嗎?我們應該先試著看看已經有什麼可以使用。有很多很棒的開源工具包可供我們使用,這些工具包的開發人員已經投入了大量的時間和精力來開發和測試它們。顯然,開源並不是每個人、每次都可以使用的解決方案,但是即使您不能在應用程式中使用它,也可以通過使用和試驗它們獲得大量的知識。

       購買通常不是一個最佳選擇。如果你足夠幸運地找到要買的東西,但你可能不會得到批准,因為它將花費一大筆錢!如果你需要修改產品來做你需要的事情,會發生什麼?祝您好運,能夠訪問原始碼或者讓支援團隊為您更改他們的優先順序。這中情況幾乎不會發生,至少不會像我們需要的那麼快。

       至於自己構建,嘿,我們是開發者,這是我們都想做的,對吧?但是在您啟動Visual Studio之前,請仔細地考慮一下您將要進入的環境。

       所以開源應該永遠是第一選擇。您可以將其引入內部(假設許可允許您這樣做),在需要時根據您的標準對其進行調整(程式碼聯絡、更多的單元測試、更好的文件,等等)      

總結

       在這一章中,我們討論了機器學習的許多方面,以及實現您的程式碼的不同策略,如構建、購買或開源,並簡單介紹了一些重要的定義。我希望這能讓你們為接下來的章節做好準備。

轉載請註明出處:https://www.cnblogs.com/wangzhenyao1994/p/10223720.html 

文章發表的另一個地址:https://blog.csdn.net/wyz19940328/article/details/85835239