機器學習之迴歸篇(一)

機器學習之迴歸篇(一)

一、綜述

​ 迴歸就是從一組數據出發,確定某些變量之間的定量關係式,也就是建立數學模型並估計未知參數。迴歸的目的是預測數值型的目標值,它的目標是接受連續數據,尋找最適合數據的方程,並能對特定的值進行預測。其中所尋求的方程叫做迴歸方程,求解迴歸方程,首先要確定模型,最簡單的迴歸模型就是簡單線性迴歸(例如y = kx + b),然後就是求迴歸方程的迴歸係數(即k和b的值)。

二、線性迴歸

​ 線性迴歸的模型(數學表達式)定義爲: \[ f(x) = \sum_\limits{i=1}^n \omega_ix_i + \omega_0=\omega_0+ \omega_1x_1 + \omega_2x_3+...+\omega_nx_n \], 用矩陣表

示就是\(f(x)= XW\),其中\(X = \begin{bmatrix}1&x_1&x_2&...&x_n \end{bmatrix}, W = \begin{bmatrix}\omega_0\\\omega_1\\...\\\omega_n\\ \end{bmatrix}\)\(X\)爲增廣特徵向量,\(W\)是增廣權向量。線性迴歸就是求解增廣權向量的過程。

2.1簡單線性迴歸舉例

​ 爲了求出增廣權向量,我們首先要進行取樣,也就是從我們要研究的問題中取出一些具有代表性的數據。比如我要預測武漢大學附近的房價,那我首先就要找出武漢大學附近地區最近幾年的房價數據(來源於:房天下)。這樣我們就取得了一系列樣本,這些樣本數據包含兩個維度,即時間和價格(實際上房價除了和這兩個因素有關,還和地段、樓層、小區環境、物業等因素相關,這裏我們主要是研究時間和房價的關係,所以價格應該指的是平均房價)。這樣我們就可以建立一個二維平面直角座標系,橫軸表示時間,縱軸表示平均價格。如下圖所示:

image

程序代碼如下:

# -*- coding: utf-8 -*
import numpy as np
import pandas as pd
from datetime import datetime 
from matplotlib import pyplot as plt
import matplotlib.dates as mdates

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']= False 

x = ['2018-11','2018-12','2019-01','2019-02','2019-03','2019-04','2019-05','2019-06','2019-07','2019-08','2019-09','2019-10']
y = np.array([20128, 20144, 20331, 20065, 20017, 19972, 19902, 19706, 19997, 20057, 20213, 20341])
x = [datetime.strptime(d, '%Y-%m') for d in x]

plt.title("武漢市洪山區平均房價")
plt.ylim((19500, 20500))
plt.ylabel(u'平均房價(元/平方米)')
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))#設置時間標籤顯示格式
plt.gca().xaxis.set_major_locator(mdates.MonthLocator())
plt.plot(x,y,'.')
plt.xlabel(u'月份(2018.11-2019.10)')
plt.gcf().autofmt_xdate()
plt.show()

如果不能顯示中文,請參考知乎第一條回答

​ 線性迴歸就是,求解一條形如y = kx + b的直線來去擬合這些散點。如下圖,就有一藍一綠兩條直線對所有樣本點進行了擬合。哪一條直線的擬合效果更好呢?

image-20191020174321750

直觀上來看,藍線直接將第一個點和最後一個點連起來(事實上,代碼裏面我也是這麼做的),綠線是將第五個點和倒數第二個點直接連起來(實際代碼中,我並不是這樣做的,只是圖像恰好這麼顯示)。大部分點都在藍線的下方,而綠線兩側的點大致均衡。所以,我們可以粗略地認爲綠線的擬合效果要比藍線好。這也就是高中數學(物理)中,經常講到的擬合時要讓樣本點均勻分佈在直線兩側(還有一條規則是,明顯錯誤的數據點要捨棄)。

2.1線性迴歸的誤差

​ 線性迴歸,我們要找到一條最佳的擬合線,如何去判斷擬合線是不是最佳呢?這裏我們就要引出一個概念---誤差。初中物理把誤差定義爲測量值和真實值之間的差異,在迴歸分析中,我們可以把誤差粗略地定義爲實際值減去預測值,數學表示爲\[e = y_a-y_p(a表示actual,p表示predicted)\]\(y_a\)爲樣本點的縱座標,\(y_p\)爲對應的直線上的點的縱座標。(實際上,更爲準確地定義是將誤差用歐式距離來描述。線性迴歸中,就是找到一個直線,使得所有樣本點到直線的歐式距離最小。)求解最佳擬合線,就是使得誤差和\(\sum_\limits{i=1}^ne_i\)最小的直線的過程。在線性迴歸中,我們用損失函數\(J(w)\)來度量誤差和的大小,通常情況下我們使用均方誤差作爲損失函數,數學表示爲\(J(w)=\cfrac{1}{n}\sum_\limits{i=1}^n(y_a-y_p)^2\),對於均方誤差,我們通常使用最小二乘法最小化損失函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章