人工智能通識-編程-機器學習算法的思路評估

歡迎關注我的專欄( つ??ω??)つ【人工智能通識】


接著前一篇文章房屋建議租金機器學習算法思路繼續(xù)分析似枕,這次我們著重思考怎么評估我們的算法盖淡。

方法分析

上一篇我們用隨機暴力試探得到y=axa的值,大約是34凿歼,但是這個暴力隨機的方法好不好褪迟?
評估一個算法可以從幾個方面考慮:

  1. 算法的結果準不準,不管白貓黑貓答憔,抓到老鼠就好貓味赃。
  2. 算法的訓練train的速度快不快,性能好不好虐拓,一年只抓到一只老鼠的也不是好貓心俗。
  3. 算法是不是可以被理解,如果自家的貓只要一念咒語就會出現(xiàn)一只死老鼠蓉驹,這樣的貓也太恐怖了城榛。

第2點性能評估容易,只要在train函數(shù)加入時間輸出就可以了态兴,如果進一步考慮的話可以跟蹤輸出cost值的下降曲線吠谢,看它是否能比較快的到達最終結果,畢竟最后那些+0.1又-0.1來回震蕩的時間沒啥意義诗茎。

第3點可理解性也不難工坊,畢竟算法是我們自己寫的献汗,絕大多數(shù)時候我們自己還是可以解釋清楚貓是怎么抓老鼠的,比如我們這個暴力靠近的方法中間沒有任何魔法王污。

第1點稍微麻煩些罢吃,怎么知道34這個結果是不是足夠好?很簡單昭齐,用用就知道尿招,我們用這個34來預測些未知的房屋面積,看看是不是靠譜阱驾,有多靠譜就好了就谜。

性能評估

我們準備用plotly把100次循環(huán)中cost下降的情況繪制出來,下面的代碼執(zhí)行繪圖:

import plotly.offline as py
import plotly.graph_objs as go
py.init_notebook_mode()

costData=go.Scatter(
    x=[n for n in range(100)],
    y=[0 for n in range(100)],
)

costLayout = go.Layout(
    title='Cost下降曲線',
    autosize=False,
    width=500,
    height=500,
    xaxis=dict(
        autorange=False,
        range=(0, 100),
        dtick=10,
        showline=True,
        mirror='ticks',
        title='Loops',
        rangemode='tozero'
    ),
    yaxis=dict(
        autorange=True,
        showline=True,
        mirror='ticks',
        title='Costs',
        rangemode='tozero'
    ),
)

costFig = go.FigureWidget([costData],costLayout)
costFig
train()

如果執(zhí)行這個代碼會出現(xiàn)一個圖:


這是因為我們沒有在train函數(shù)中更新繪圖數(shù)據(jù)里覆。
修改上面的train函數(shù):

import time


def train():
    start = time.time()
    lastA = 1
    lastCost = 0
    learnRate = 1
    for i in range(100):
        newA = lastA + learnRate
        newCost = getCost(newA)
        if newCost > lastCost:
            learnRate = learnRate * (-1)
        lastCost = newCost
        lastA = newA

        #更新costFig
        dataY = list(costFig.data[0]['y'])
        dataY[i] = newCost
        costFig.data[0]['y'] = dataY
    end = time.time()
    print('>耗時:{}毫秒 '.format(end - start))

    return newA

運行得到:


可以從圖中看到33次左右之后cost價值就不再降低丧荐,也就是已經(jīng)達到最優(yōu)值34左右了,整個耗時4.34秒喧枷,但其中大部分時間(30多次之后)純粹是在做無意義的震蕩虹统。

沒有對比就沒有傷害,初來乍到的我們目前還不好說這個算法的性能是否夠好隧甚,但是车荔,可以把這個作為一個參考,在此基礎上進行優(yōu)化戚扳。

精準度評估

我們的模型y=34.8x是否好用忧便?我們需要用事實來檢測,我們的模型只使用了100個樣本進行訓練帽借,我們可以拿另外100個樣本讓它來評估一下茬腿,給出推薦租金,然后我們再對比這個推薦租金和真實租金之間的差距宜雀,可以把它作為模型的精準度切平。

評估函數(shù)及執(zhí)行評估y=34.8x代碼:

def evaluate(a):
    cost_li=[]
    for n in range(0,100):
        item=df.loc[n]
        area=float(item['area'])
        predict=a*area
        offset=float(item['money'])-predict
        cost_li.append(offset)
    return cost_li

evalLi=evaluate(34.8)

對評估結果繪圖。

import random

import plotly.offline as py
import plotly.graph_objs as go
py.init_notebook_mode()

evalData=go.Scatter(
    x=[n for n in range(100)],
    y=[evalLi[i] for i  in range(len(evalLi))],
)

evalLayout = go.Layout(
    title='預測評估',
    autosize=False,
    width=500,
    height=500,
    xaxis=dict(
        autorange=False,
        range=(0, 100),
        dtick=10,
        showline=True,
        mirror='ticks',
        title='Loops',
        rangemode='tozero'
    ),
    yaxis=dict(
        autorange=False,
        range=(-10000, 10000),
        showline=True,
        mirror='ticks',
        title='Offsets',
    ),
)

evalFig = go.FigureWidget([evalData],evalLayout)
evalFig

print('平均偏差:{}'.format(sum(evalLi)/len(evalLi)))

對于100~200之間的樣本預測辐董,得到很大的偏差-512悴品,差距很大。而且分布非常不均勻简烘,很多偏差都超過正負1000苔严,就是說預測租金和實際租金相差超過1000元,這個還是很糟糕的孤澎。

如果我們改為預測0~100個樣本(就是train也使用的這個樣本范圍)届氢,那么平均偏差只有-300左右,還是可以的覆旭。

你可以嘗試調整更多參數(shù)退子,不同的樣本范圍岖妄、不同的a值進行測試。更多的進一步修正我們后續(xù)慢慢改進寂祥。

恭祝各位除夕快樂荐虐!預祝大家新的一年,萬事如意丸凭,訓練速度越來越快福扬,模型精度越來越高ヽ(???)ノ!惜犀!


歡迎關注我的專欄( つ??ω??)つ【人工智能通識】


每個人的智能新時代

如果您發(fā)現(xiàn)文章錯誤铛碑,請不吝留言指正;
如果您覺得有用虽界,請點喜歡汽烦;
如果您覺得很有用,歡迎轉載~


END

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末浓恳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子碗暗,更是在濱河造成了極大的恐慌颈将,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件言疗,死亡現(xiàn)場離奇詭異晴圾,居然都是意外死亡,警方通過查閱死者的電腦和手機噪奄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門死姚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人勤篮,你說我怎么就攤上這事都毒。” “怎么了碰缔?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵账劲,是天一觀的道長。 經(jīng)常有香客問我金抡,道長瀑焦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任梗肝,我火速辦了婚禮榛瓮,結果婚禮上,老公的妹妹穿的比我還像新娘巫击。我一直安慰自己禀晓,他們只是感情好精续,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著匆绣,像睡著了一般驻右。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上崎淳,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天堪夭,我揣著相機與錄音,去河邊找鬼拣凹。 笑死森爽,一個胖子當著我的面吹牛,可吹牛的內容都是我干的嚣镜。 我是一名探鬼主播爬迟,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼菊匿!你這毒婦竟也來了付呕?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤跌捆,失蹤者是張志新(化名)和其女友劉穎徽职,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佩厚,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡姆钉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了抄瓦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片潮瓶。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖钙姊,靈堂內的尸體忽然破棺而出毯辅,到底是詐尸還是另有隱情,我是刑警寧澤煞额,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布悉罕,位于F島的核電站,受9級特大地震影響立镶,放射性物質發(fā)生泄漏壁袄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一媚媒、第九天 我趴在偏房一處隱蔽的房頂上張望嗜逻。 院中可真熱鬧,春花似錦缭召、人聲如沸栈顷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萄凤。三九已至室抽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間靡努,已是汗流浹背坪圾。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惑朦,地道東北人兽泄。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像漾月,于是被迫代替她去往敵國和親病梢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內容