12-少年,玩模型嗎?手把手教你statsmodels建模(3)
生活中我們總是歡迎變化的,不變是溫水,是地獄,最忌活成辦公室的家具。然而變化終究是外界的,內心的信念不變,才使人身處順境不眼暈,身處逆境如微風拂面。人的內心如孩童,總是期盼驚喜。可現實的”重錘“讓成人如被電擊的小白鼠小心翼翼,生怕行差踏錯一步墮入萬丈深淵。其實都是想象中的深淵,也是想象中的安全感,都是幻覺啊,少年。毀壞容易建設難,另一方面,不破則不立。我喜歡回憶去年此時,再看今年此時,展望明年此時。發現並沒有活成一具雕塑。也有人行為藝術般每年相同日期、地點、人物拍照留念,其實記錄的都是外形變化,哪能攝取心中氣象萬千呢?從前慢,回憶美,是因為經歷豐富充實罷了。Anyway,學會溫和地反擊吧。朋友圈的大牛肖凱老師昨天發了一條金句:My only goal is to gradient boost over myself of yesterday. And to repeat this everyday with an unconquerable spirit.共勉:)
下面是今天的gradient boost,natural?(o>▽<)
4最優化:Optimization
1. 函數求根(即函數零點)
2. 函數求最小值
由上圖可見,當初始值為 10 時,函數找到的是局部最小值點,可見 minimize 的默認算法對起始點的依賴性。那麽怎麽才能不管初始值在哪個位置,都能找到全局最小值點呢?
可以使用 basinhopping 函數找到全局最優點。相關背後算法,可以查看幫助文檔:
我們設初始值為 10 看是否能找到全局最小值點。
當起始點在比較遠的位置,依然成功找到了全局最小值點!
下面看看如何求多元函數最小值?
以二元函數為例,使用 minimize函數求對應的最小值。
3. 曲線擬合
曲線擬合和最優化有什麽關系?
曲線擬合的問題是,給定一組數據,它可能是沿著一條線散布的,這時要找到一條最優的曲線來擬合這些數據,這裏的最優是指這些點和線之間的距離是最小的,這就是為什麽要用最優化問題來解決曲線擬合問題。
上面的點整體上呈現一個線性關系,要找到一條斜線來代表這些點,這就是經典的一元線性回歸。要優化的函數是點和線之間的距離,使其最小。點是確定的,而線是可變的,線是由參數值:斜率和截距決定的,這裏就是要通過優化距離找到最優的斜率和截距。
Method1 using scipy.optimize.minimize
上式是誤差平方和,即需要最小化的目標函數。
上面兩個輸出即是預測的直線斜率和截距,我們是根據點來反推直線的斜率和截距,那麽真實的斜率和截距是多少呢?-1 和 2,很接近了,差的一點是因為有噪音的引入。
Method2 using statsmodels.api
這周回憶了好多數學概念,真是懷舊的一周(●‘?‘●)?? 下周學習statsmodels建模的最後一節:線性模型,敬請期待!
12-少年,玩模型嗎?手把手教你statsmodels建模(3)