目錄python
人工智能的核心是機器學習,機器學習的本質是算法程序員
機器學習的官方解釋:機器學習是指若是一個程序能夠在任務 T 上,隨經驗E 的增長,效果 P 也隨之增長,則這個程序能夠從經驗中學習。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.算法
機器學習的真實含義:機器學習能讓咱們自數據集中受到啓發,換句話說,咱們會利用計算機來彰顯數據背後的真實含義。他也許不是咱們所想象的那種會模仿的機器人,也不是那種具備人類感情的仿生人。 —《機器學習實戰》編程
機器學習的應用場景:數組
你早上到了公司,點開你的公司郵箱檢查昨晚有沒有人給你發送郵件。在你點開郵件系統的時候,垃圾郵件過濾器已經在後臺幫你自動的過濾了垃圾廣告郵件。dom
工做閒暇之餘,你去某寶經過關鍵字搜索某件你想要購買的東西,可是老闆忽然走了過了,你尚未購買便強行退出了某寶。那麼某寶會記錄你此次的行爲,而後你下次登錄某寶時會發現某寶換了一批你想要的產品推薦給你。機器學習
工做以後,你去一個大商場購買一袋酒鬼花生,而後在結帳的時候收銀員給了你一張5元的優惠券,能夠用於購買一打啤酒。之因此你會獲得這張優惠券,是由於這臺收費軟件基於之前的統計知識,認爲買酒鬼花生的人每每也會買啤酒。函數
回到家你拿出手機點開了抖音,你會發現抖音給你推送的都是你喜歡的短視頻,你看的目不轉睛。由於抖音在你每次搜索以後都會記錄你的行爲,而後把全部與你搜索相關的視頻做爲推送給你的主要目標。工具
總而言之,機器學習技術目前應用於各類場景,例如:人臉識別、手寫數字識別、垃圾郵件過濾和某寶的產品推薦。佈局
把無序的數據轉換成有用的信息。
機器學習不限制某個單獨的領域,機器學習能夠應用於任何須要解釋並操做數據的領域。
注意:機器學習沒法保持完美地預測,但經過統計學的知識可以提升咱們預測的正確率,而且在社會科學領域,若是某個分析的正確率能高達60%就會被認爲是很是成功的。若是咱們須要創建一個模型,用此來預測如何能讓每一個人以一樣的方式得到幸福。但這可想而知是很可貴,由於你們對幸福的理解都是迥異不一樣的。
如今智能手機上有各式各樣的傳感器,例如磁力計、偏航率陀螺儀、三軸加速器、溫度傳感器和 GPS 接收器,經過這些傳感器會產生海量的數據,也就意味着咱們將來要面臨愈來愈多的數據,所以如何從這些海量數據中抽取到有價值的信息將是一個很是重要的課題。
在過去的半個世紀裏,發達國家的多數工做崗位都從體力勞動轉化爲腦力勞動,但如今都在逐步消失,例如目前興起的無人便利店、無人加油站、無人飛機、無人駕駛等等,而這些都依賴於對信息的處理,對海量數據的處理,機器學習也就運用而生,他將幫助咱們從中抽取有用的信息。
若是咱們工做一段時候後,打算去找中介買房。中介會詢問你對房子的需求,例如:大小、佈局、朝向、地理位置。固然,必定不只僅只有這些,咱們假設中介只會問你這四點,而這四點在機器學習中稱之爲特徵feature,有時候也會稱爲屬性attribute,之後咱們會統稱爲特徵。
以後你說出了你的需求——大小:100㎡、佈局:三室一廳一衛、朝向:朝南、地理位置:上海市徐彙區——的房子,而後中介會去他們的搜索系統中找到這些特徵輸入對應的值,以後該系統會列出與你想要的房子類似的房源,並打印一份帶有價格的表格給你,這個表格中的每一所房子在機器學習中都是一個具備相關特徵的示例instance,也能夠稱之爲樣本sample。
表1-1:基於上述特徵搜索的房源
大小 | 佈局 | 朝向 | 地理位置 | 價格 |
---|---|---|---|---|
100㎡ | 三室一廳一衛 | 朝北 | 上海市徐彙區 | 500w |
105㎡ | 三室兩廳一衛 | 朝南 | 上海市閔行區 | 502w |
100㎡ | 三室一廳一衛 | 朝南 | 上海市黃浦區 | 505w |
…… | …… | …… | …… | …… |
輸出該表格的搜索系統就是一個機器學習系統,他會對咱們給出的數據判斷並把合適的結果推薦給咱們,而且在推薦給咱們以前他們使用迴歸算法對這些房子的價格進行了預測。此處咱們只拿房價預測舉例
這個時候咱們可能對買房不感興趣了,由於咱們只准備了100w,然而符合咱們內心預期的房子最低也要500w,因此咱們認爲他們的機器學習系統對房價的預測是不許確的,因此咱們想本身研究一個預測房價的機器學習系統賣給他們。如今咱們就開始手動實現一個機器學習算法讓咱們能夠經過這四個特徵來預測這所房子的價格。
所以咱們去房源官網採集了一些數據,並對這些數據進行清洗,以確保咱們的數據格式是咱們的機器學習算法所須要的。
如今咱們擁有了不少房子的數據供咱們測試、分析,這些數據在機器學習中被稱爲訓練集training set:訓練集用於訓練機器學習算法的數據樣本集合,表1-1就是一個包含多個訓練樣本training sample的訓練集,每一個訓練樣本中包含4種特徵、一個標記label:本例中標記是房價,是機器學習算法的預測結果。
在機器學習中,一般咱們會把訓練集中的數據分爲訓練數據training data和測試數據testing data,咱們設計一個機器學習算法對訓練數據進行訓練,以後咱們用測試數據來測試該算法的精準度——比對算法輸出的結果與測試數據已有的結果,就能夠得出咱們該算法的精準度,若是精準度沒有達到要求,咱們就須要從新設計算法而後再分析。固然還有交叉驗證集的概念,之後咱們在敘述。
若是咱們作出的算法的精準度很高,咱們就能夠把機器學習算法轉換爲應用程序,咱們就能夠把這個系統賣給那所中介了。
上述的房價的實例是經過房子的特徵預測房價,而房價是連續值,所以用到的是迴歸regression,即經過給定的特徵擬合數據點的位置,而後經過該擬合曲線與測試數據點的位置便可獲得測試的結果。機器學習的另外一項任務是分類classification,他的目標變量大都是離散值,若是房價≥500w 的咱們稱之爲高房價,不然咱們稱之爲低房價,則咱們能夠經過房子的特徵判斷房價是高房價仍是低房價。分類和迴歸都屬於監督學習,之因此稱之爲監督學習,是由於這類算法必須知道預測什麼,即有明確的目標變量。
除了對房價的預測,咱們還能夠對房子分紅若干個組,每組咱們稱爲一個簇cluster,這些自動造成的簇可能對應一些潛在的概念劃分,例如電梯房、無電梯房,可是電梯房和無電梯房這樣的概念咱們事先是不知道的,而且訓練樣本一般也無該標記信息,只是經過聚類clustering的方法對房子的數據進行分析,而後給出了咱們這樣一個潛在的概念。
固然,機器學習遠不止這些內容,可是這些基本術語對咱們這些初學者來說,已經夠用了。房子也買了,預測房價系統也實現了,相信你們對機器學習有了一個更深層次的瞭解,而不是《變形金剛》中的大黃蜂諸如此類…
下面咱們也要從一個買房者的身份轉換成一個機器學習者,這樣咱們才能實現咱們的房價預測系統順帶實現咱們的買房大願,而不是以程序員的口吻說出:「怎麼能這麼貴呢?必定是房價預測系統出了問題。」
首先淺談咱們的 Python 吧!Python 相信你們必定不陌生,這兩年已經成了風口上的那頭「神豬」,他能成爲「神豬」的緣由和機器學習是密不可分的,他雖然沒有 編譯語言如 C 那樣的執行效率,可是他以開發效率快著稱,他的語法清晰,易於操做純文本文件,使用普遍,存在大量的開發文檔。而且他一度被稱做可執行僞代碼,默認附帶了不少高級數據類型,可使用本身熟悉的編程風格,如面向對象編程、面向過程編程。
Python 自帶的 SciPy 和 NumPy 等許多科學函數庫均可以實現向量和矩陣的操做,而且這些科學函數庫使用底層語言編寫,極大的提升了相關應用程序的計算性能。
Python 自帶的科學工具還能夠與繪圖工具 Matplotlib協同工做。Matplotlib 能夠繪製2D、3D 圖形,也能夠處理科學研究中常常用到的圖形。
Python 的好處很少敘述,不能由於咱們用 Python 而去吹捧他,只是由於他是真的很適合咱們這些新手吧。而且最最重要的是:Python 的核心代碼可使用 C 來替換,而不必非得和編譯型語言拼執行效率,那不是自尋死路嗎?
機器學習的工具中,在我心中除了 Python其餘的都是非 Python,爲何這麼講呢?讓我娓娓道來。
首先 MATLAB 不用多講了,單個軟件受權費就要花費上千美圓。做爲一個合格的程序員,若是讓我花錢使用某個軟件,那麼我情願……固然,你也可使用 Octave,Octave 我也使用過一段時間,怎麼講呢?執行速度是不用講的,可是 Octave 功能太單一,若是隻是單純的拿來操做矩陣,那是能夠的,若是用它來進行機器學習程序的編寫,我只能說有點累。
Java 和 C 等強類型語言也有矩陣數學庫,可是曾經網上就流傳過一段佳話:一個程序 C 寫可能須要100行,Java 可能須要50行,而 Python 可能只須要20行。對於只寫過 Python 代碼的你來講,你可能沒法體會,但對於我這個用過 C 的人來講,爲何你寫個簡單的九九乘法表那麼麻煩?不論更代碼是否是給人看的,更重要一點的是,在這個快社會,相比較快速的執行效率,公司仍是但願更快的開發效率吧?畢竟如今是我的都想成爲第一個吃螃蟹的人。固然,你自創的公司可能例外。
注意:若是不熟悉線性代數也不用着急,這裏用到的線性代數只是簡化不一樣的數據點上執行的相同數學運算。將數據表示爲矩陣形式,只須要執行簡單的矩陣運算而不須要複雜的循環操做。總而言之使用線性代數只是爲了簡化運算,並無用到較深的數學只是,例如矩陣的運算其實可使用 for 循環來代替,只不過使用矩陣運算更方便、更有效率。
注意:再次重申,也許你不懂線性代數,也許你不知道什麼是數組,什麼是矩陣,什麼是矩陣的逆,什麼是單位矩陣,但這一點都不影響你成爲一名機器學習專家,但他或許會影響你成爲圖靈、成爲馮諾依曼那樣的大師,但我極力推薦你須要去本身瞭解一些機器學習的原理,這就比如看 Django、看 Flask 源碼同樣令你心情舒暢。這裏推薦吳恩達老師機器學習視頻,以及周志華老師的《機器學習》西瓜書,都是很好的入門教材。
from numpy import * print(random.rand(3,3)) # 構建一個3*3的隨機數組 ''' array([[0.49464356, 0.76076607, 0.43525461], [0.37401296, 0.83818918, 0.8630109 ], [0.30685469, 0.65686257, 0.9354526 ]]) ''' # 將數組轉化爲矩陣 rand_mat = mat(random.rand(3,3)) print(rand_mat) ''' matrix([[0.53549597, 0.1512243 , 0.13608029], [0.43568756, 0.75499249, 0.27348369], [0.06484205, 0.67025154, 0.25451123]]) ''' # 對矩陣求逆 inv_rand_mat = rand_mat.I print(inv_rand_mat.I) ''' matrix([[ 0.37301234, 2.22174614, -2.58680522], [ -3.92575573, 5.37174698, -3.67318659], [ 10.24338676, -14.7124522 , 14.26142481]]) ''' # 執行矩陣乘法 my_eye = inv_rand_mat * rand_mat ''' 計算結果本應該是單位矩陣,即對角線全是1,其餘元素都是0,可是因爲計算機處理有偏差,矩陣裏還留下了許多很是小的元素。 matrix([[1.00000000e+00, 1.76037137e-17, 1.35053809e-16], [7.06118772e-17, 1.00000000e+00, 3.09252006e-16], [1.93493163e-16, 1.02215889e-17, 1.00000000e+00]]) ''' # 獲得偏差值: error = my_eye - eye(3) ''' eye(3)獲得一個3*3的單位矩陣 matrix([[ 0.00000000e+00, 1.76037137e-17, 1.35053809e-16], [ 7.06118772e-17, -1.11022302e-16, 3.09252006e-16], [ 1.93493163e-16, 1.02215889e-17, -3.33066907e-16]]) '''
rand_arra = random.rand(3,3) rand_mat = mat(random.rand(3,3)) inv_rand_mat = rand_mat.I my_eye = inv_rand_mat * rand_mat error = my_eye - eye(3) print(""" rand_arra: {0}\n rand_mat: {1}\n inv_rand_mat: {2}\n my_eye: {3}\n error: {4}""".format( rand_arra,rand_mat,inv_rand_mat,my_eye,error))
曾經熱火朝天的互聯網+、跌落神壇的比特幣(區塊鏈),不說接盤俠們,別那麼悲觀,咱們更應該考慮的是他們給多少人帶來了財富自由的機會,你要知道正態分佈的左端只會漲不會跌。
現現在,如本文前面所說,現現在人類所能產生的數據量是海量的,隨着大數據的推動,數據量只會愈來愈大,而機器學習的重要性也可想而知。雖然Python、機器學習已經踩在風口浪尖上,他隨時有可能跌落神壇,但咱們是沒法預測他何時也會跌落神壇的,事實證實咱們已經沒法成爲那第一頭「神豬」,也正是這個沒法預測、這個事實證實,咱們纔有機會,你要知道,最後稱王的不是陳勝吳廣、不是 ofo、不是 Uber、不是開心農場,後來者居上,正所謂「長江後浪推前浪,前浪被拍死在沙灘上」,咱們要向牛頓學習——站在巨人的肩膀上,而後超過他們,而不是鄙夷之。
曾聽過一段很經典的話,若是你只是單純的作IT,那麼每一年會有數不清的人和你競爭,這個市場早晚會飽和,Python 也許會成爲下一個 C、下一個.net、下一個 Java,可是在醫藥行業你會編程,在汽車行業你會編程,那麼就是香餑餑了。而現現在機器學習給咱們提供了一個很好的機會,正如本文所說機器學習不限領域,它更多地是對數據的處理。
世俗也好,名利也罷,但願本文能讓你對機器學習有一個大概的瞭解,可以愛上他。也許他並無你想的那麼神祕。
預知後事如何,請看下回分解——k-近鄰算法