手把腳教你實現第一個在線預測系統No.21

本來呢,最近看了人類簡史,想寫一篇偏見相關的,思路還沒整理好不好放出來,先寫個技術的吧。最近真是忙成狗,搬職場,找房子租,參加各種各樣的會議,還有開發任務,做屁屁踢,接下來架構的規劃,知識儲備。

可是畢竟我也不想跳票的嘛。T_T

說實話。

時間還是蠻充裕的,啊哈哈哈哈哈哈!!!!!!!

突然想起上一篇忘了開原創忘了開贊賞而且忘了放二維碼,現在心塞塞塞塞塞的,大家點個贊或者分享一下我會很開心的。

今天就用比較主流的架構,來簡單實現這個在線預測系統,來完全打消小伙伴們對機器學習的恐懼感,它不難,但是我從沒說過它很簡單。

整套代碼核心的代碼不超過10行,相信我,就算你完全不會任何數學,也不會對開發造成任何的影響。

當然我之前說過,想要往深了做,要有扎實的數學和英語基礎。為什么??因為AI這個技術還是個小BB,還沒長大,還要用各種各樣的論文來喂它茁壯長大,要是看不懂別人的論文或者無法復現,那咋跟進最新技術進展??

架構是django+scikit-learn,這個在我上一篇已經提到過了,這是最最最簡單的實現方式,不服來辯。

敲黑板!!!課前要準備好這些,開發環境環境為ubuntu14.04,不會安裝的,問度娘或者谷哥去。
python2.7,pip,django,scikit-learn,pandas,numpy,Pycharm,。

好,隨便找個目錄,哐哐哐輸入下面這樣django初始化項目的腳本。

django-admin startproject ph_ml_core

好了,項目初始化完了。目錄結構長啥樣的呢?

看起來特么好多啊,那既然說了很簡單了,其實絕大部分我們都不需要去改動。那,有哪些是我們自己要去寫的呢?

Advertising.csv是數據文件,QualifiedModel.py是我們核心的業務邏輯代碼,view.py是我們的視圖,urls.py是django的路由+控制器。

第一步先給我們的系統加一個路徑叫predict的玩意,這個就是暴露給http請求的接口,至于咋實現或者啥意思,就是個正則表達式有興趣的小伙伴自己去看。

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^predict/$', predict),
]

第二步就是寫視圖了,這個比較摻雜,大致意思就是調用一個模型進行評分,核心的就這一句score = qual.predict()。

沒錯調模型就是這么簡單。

def predict(request):
# 獲得請求數據,并轉成字典格式。
rowData = eval(request.GET['a'])
# 獲得已經訓練好的模型
qual = QualifiedModel()
# 直接對新進件的數據進行評分
score = qual.predict(np.array([[rowData['TV'],rowData['Radio'],rowData['Newspaper']]]))
# 組裝返回數據
result = {}
result['score'] = score[0]
return HttpResponse(json.dumps(result),content_type='application/json')

第三步,訓練模型,就在上一步我們調用了模型,那模型怎么來的呢?肯定是通過我們的訓練數據來的。這里使用Lasso,什么是Lasso我這里就不介紹了有必要的話我后面起個文章單獨說,現在先自行問度娘去,一個線性模型。

哈什么?你對模型不熟,不會對模型調參?沒問題,sklearn都幫咱實現好了,直使用交叉驗證,連調參都不用了。交叉驗證是什么,就是給它一大堆參數組合,然后我不管,我就要那個訓練結果最佳的。

def initModel(self):

    #獲取數據
    data = pd.read_csv(os.path.join(os.path.abspath(os.path.dirname(__file__)),'Advertising.csv'))
    #取得特征值
    x = data[['TV','Radio','Newspaper']]
    #取得結果值
    y = data['Sales']
    #通過交叉驗證訓練得到最佳模型
     model = Lasso()
    alpha_can = np.logspace(-3, 2, 10)
    np.set_printoptions(suppress=True)
    lassoModel = GridSearchCV(model,param_grid={'alpha':alpha_can},cv=5)
    lassoModel.fit(x_train,y_train)

第四步,調用試試看吖。

http://127.0.0.1:8000/predict/?a={"TV": 65, "Newspaper": 15, "Radio": 30}
返回:{"score": 11.328439830355411}
http://127.0.0.1:8000/predict/?a={"V": 29, "Newspaper": 15, "Radio": 30}
返回:{"score": 9.6539587774368592}

到這里,我們所有的功能都已經實現完了。是不是非常簡單?其實我們很多時候害怕一個東西是因為這個東西不熟悉,就像我之前說的,做做做,做起來,慢慢你就不怕了。

在這里我要說一個事實,智商是不可逾越的,這句話還真有可能是正確的。讓一個智商普通的人去突破物理學的界限,這顯然,不太可能會實現,只能說P(突破物理界限|已知是一個智商普通的人)很低,我這里說的智商是思維能力,并不是指什么什么智商測試的結果。但是也是很明顯的,很多人都是日復一日做著一樣的事情,被各種各樣的會議,各種各樣的繁瑣的事情,禁錮了自己的思維,也禁錮了自己的潛力,都沒到開始拼智商的時候好嗎??

到現在還有人說開發工程師是一個要求很高的職業,其實這個職業的要求真心不算高,任何一個經過系統培訓的小白,都能按照老師教的結果哐哐哐寫出一些"業務邏輯",但要是止步于此不去做任何的思考,不理解為什么是這樣做,那你的上限也就這樣了。

凡事問三層,"為什么這樣就有這樣的效果呢"?可能會有不同的結果。

但是呢,在你跟別人討論或者請教的時候,自己還是要先有料,自己做足各種各樣的研究,準備好各種各樣的資料,再去開始請教,可能會比較。不然我就會說一句喬布斯回答別人經常說的話---"it is complicated",沒錯,那我只能告訴你,這很復雜。

當然付費的一般就不存在這個問題,比如老師啊,培訓師啊,各種網紅的收費欄目啊,就不存在這個問題。為什么呢,因為你做了其他的努力去賺取這個付費的款項,也算是做足準備了吖。

好了,后臺回復 第一只 ,獲取這次的小玩具,大家一起愉快地玩耍吧。要是分享給其他小伙伴我會很開心的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容