手把腳教你實(shí)現(xiàn)第一個(gè)在線預(yù)測(cè)系統(tǒng)No.21

本來呢,最近看了人類簡(jiǎn)史,想寫一篇偏見相關(guān)的,思路還沒整理好不好放出來,先寫個(gè)技術(shù)的吧。最近真是忙成狗,搬職場(chǎng),找房子租,參加各種各樣的會(huì)議,還有開發(fā)任務(wù),做屁屁踢,接下來架構(gòu)的規(guī)劃,知識(shí)儲(chǔ)備。

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

說實(shí)話。

時(shí)間還是蠻充裕的,啊哈哈哈哈哈哈?。。。。。?!

突然想起上一篇忘了開原創(chuàng)忘了開贊賞而且忘了放二維碼,現(xiàn)在心塞塞塞塞塞的,大家點(diǎn)個(gè)贊或者分享一下我會(huì)很開心的。

今天就用比較主流的架構(gòu),來簡(jiǎn)單實(shí)現(xiàn)這個(gè)在線預(yù)測(cè)系統(tǒng),來完全打消小伙伴們對(duì)機(jī)器學(xué)習(xí)的恐懼感,它不難,但是我從沒說過它很簡(jiǎn)單。

整套代碼核心的代碼不超過10行,相信我,就算你完全不會(huì)任何數(shù)學(xué),也不會(huì)對(duì)開發(fā)造成任何的影響。

當(dāng)然我之前說過,想要往深了做,要有扎實(shí)的數(shù)學(xué)和英語基礎(chǔ)。為什么??因?yàn)锳I這個(gè)技術(shù)還是個(gè)小BB,還沒長大,還要用各種各樣的論文來喂它茁壯長大,要是看不懂別人的論文或者無法復(fù)現(xiàn),那咋跟進(jìn)最新技術(shù)進(jìn)展??

架構(gòu)是django+scikit-learn,這個(gè)在我上一篇已經(jīng)提到過了,這是最最最簡(jiǎn)單的實(shí)現(xiàn)方式,不服來辯。

敲黑板?。。≌n前要準(zhǔn)備好這些,開發(fā)環(huán)境環(huán)境為ubuntu14.04,不會(huì)安裝的,問度娘或者谷哥去。
python2.7,pip,django,scikit-learn,pandas,numpy,Pycharm,。

好,隨便找個(gè)目錄,哐哐哐輸入下面這樣django初始化項(xiàng)目的腳本。

django-admin startproject ph_ml_core

好了,項(xiàng)目初始化完了。目錄結(jié)構(gòu)長啥樣的呢?

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

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

第一步先給我們的系統(tǒng)加一個(gè)路徑叫predict的玩意,這個(gè)就是暴露給http請(qǐng)求的接口,至于咋實(shí)現(xiàn)或者啥意思,就是個(gè)正則表達(dá)式有興趣的小伙伴自己去看。

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

第二步就是寫視圖了,這個(gè)比較摻雜,大致意思就是調(diào)用一個(gè)模型進(jìn)行評(píng)分,核心的就這一句score = qual.predict()。

沒錯(cuò)調(diào)模型就是這么簡(jiǎn)單。

def predict(request):
# 獲得請(qǐng)求數(shù)據(jù),并轉(zhuǎn)成字典格式。
rowData = eval(request.GET['a'])
# 獲得已經(jīng)訓(xùn)練好的模型
qual = QualifiedModel()
# 直接對(duì)新進(jìn)件的數(shù)據(jù)進(jìn)行評(píng)分
score = qual.predict(np.array([[rowData['TV'],rowData['Radio'],rowData['Newspaper']]]))
# 組裝返回?cái)?shù)據(jù)
result = {}
result['score'] = score[0]
return HttpResponse(json.dumps(result),content_type='application/json')

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

哈什么?你對(duì)模型不熟,不會(huì)對(duì)模型調(diào)參?沒問題,sklearn都幫咱實(shí)現(xiàn)好了,直使用交叉驗(yàn)證,連調(diào)參都不用了。交叉驗(yàn)證是什么,就是給它一大堆參數(shù)組合,然后我不管,我就要那個(gè)訓(xùn)練結(jié)果最佳的。

def initModel(self):

    #獲取數(shù)據(jù)
    data = pd.read_csv(os.path.join(os.path.abspath(os.path.dirname(__file__)),'Advertising.csv'))
    #取得特征值
    x = data[['TV','Radio','Newspaper']]
    #取得結(jié)果值
    y = data['Sales']
    #通過交叉驗(yàn)證訓(xùn)練得到最佳模型
     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)

第四步,調(diào)用試試看吖。

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}

到這里,我們所有的功能都已經(jīng)實(shí)現(xiàn)完了。是不是非常簡(jiǎn)單?其實(shí)我們很多時(shí)候害怕一個(gè)東西是因?yàn)檫@個(gè)東西不熟悉,就像我之前說的,做做做,做起來,慢慢你就不怕了。

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

到現(xiàn)在還有人說開發(fā)工程師是一個(gè)要求很高的職業(yè),其實(shí)這個(gè)職業(yè)的要求真心不算高,任何一個(gè)經(jīng)過系統(tǒng)培訓(xùn)的小白,都能按照老師教的結(jié)果哐哐哐寫出一些"業(yè)務(wù)邏輯",但要是止步于此不去做任何的思考,不理解為什么是這樣做,那你的上限也就這樣了。

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

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

當(dāng)然付費(fèi)的一般就不存在這個(gè)問題,比如老師啊,培訓(xùn)師啊,各種網(wǎng)紅的收費(fèi)欄目啊,就不存在這個(gè)問題。為什么呢,因?yàn)槟阕隽似渌呐θベ嵢∵@個(gè)付費(fèi)的款項(xiàng),也算是做足準(zhǔn)備了吖。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容