1 线性回归模型的原理与 scikit-learn 实现

设有数据集 \{ x^{(1)}, x^{(2)}, \ldots, x^{(m)} \},对于每一个样本 x^{(i)} \in \mathbb{R}^{n},令

\begin{cases} X = \begin{pmatrix} x^{(1)}\\ x^{(2)}\\ \vdots\\ x^{(m)} \end{pmatrix}\\ Y = \begin{pmatrix} y^{(1)}\\ y^{(2)}\\ \vdots\\ y^{(m)} \end{pmatrix}\\ \end{cases}

X 为数据集 \{(x^{(i)}, y^{(i)})\}_{i=1}^m设计矩阵。其中,y^{(i)}x^{(i)} 对应的标签。

注意

  • 对于回归任务,y^{(i)} \in \mathbb{R}
  • 对于分类任务,y^{(i)} \in \mathbb{R}^c,其中 c 为该数据集拥有的类别个数。

线性回归模型

我们先考虑一个样本 x^{(i)},且 w \in \mathbb{R}^{n}, b \in \mathbb{R},有

\begin{aligned} &\hat{y}^{(i)} = x^{(i)} w + b\\ &\ell_i = \frac{1}{2} (y^{(i)} -\hat{y}^{(i)})^2 \end{aligned}

再考虑所有样本,有

\ell = \frac{1}{2m} \sum_{i=1}^m \ell_i = \frac{1}{2m} ||Xw + b \cdot \mathbb{1} - Y||_2^2

下面我们来看看如何更新参数的?(最小化 \ell

1. 梯度下降

我们先求下梯度:

\begin{aligned} &\nabla_{w} = \frac{\partial \ell}{\partial w} = \frac{1}{m} X^T (Xw + b \cdot \mathbb{1} - Y)\\ &\nabla_b = \frac{\partial \ell}{\partial b} = \frac{1}{m} \mathbb{1}^T \cdot (Xw + b \cdot \mathbb{1} - Y) \end{aligned}

再更新参数:

\begin{aligned} &w = w - \alpha \nabla w\\ &b = b - \alpha \nabla b \end{aligned}

其中,\alpha 被称为学习率步长

scikit-learn 的实现方式不是梯度下降法,而是最小二乘法。

2 最小二乘法

\theta = \begin{pmatrix} w \\ b \end{pmatrix}\overline{X} = \begin{pmatrix} X & 1 \end{pmatrix},则

\ell = \frac{1}{m} ||\overline{X} \theta - Y||_F^2

\frac{\partial \ell}{\partial \theta} = 0 可得最小二乘解

\theta^{*} = (\overline{X}^T \overline{X})^{\dagger} Y

sklearn 实现

本文,利用 Kaggle 上数据集 USA_Housing 做线性回归任务来预测房价。

import pandas as pd
import numpy as np
name = '../dataset/USA_Housing.csv'
dataset = pd.read_csv(name)

train = dataset.iloc[:3000,:]
test = dataset.iloc[3000:,:]

print(train.shape)
print(test.shape)
(3000, 7)
(2000, 7)

查看有无缺失值:

print(np.unique(train.isnull().any()))
print(np.unique(test.isnull().any()))
[False]
[False]
dataset.columns  # 查看所有特征名称
Index(['Avg. Area Income', 'Avg. Area House Age', 'Avg. Area Number of Rooms',
       'Avg. Area Number of Bedrooms', 'Area Population', 'Price', 'Address'],
      dtype='object')

我们不考虑 'Address' 特征。通过特征 'Avg. Area Income', 'Avg. Area House Age', 'Avg. Area Number of Rooms', 'Avg. Area Number of Bedrooms', 'Area Population' 来预测 'Price'

features_column = [
    name for name in dataset.columns if name not in ['Price', 'Address']
]
label_column = ['Price']

x_train = train[features_column]
y_train = train[label_column]
x_test = test[features_column]
y_test = test[label_column]

训练线性模型

from sklearn import linear_model

regr = linear_model.LinearRegression()
regr.fit(x_train,y_train) 
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,
         normalize=False)

预测:

pred_test = regr.predict(x_test)
print('预测:\n', pred_test)
预测:
 [[1448272.69412661]
 [1301968.70364148]
 [1355317.66349181]
 ...
 [1026886.81679043]
 [1261208.34730572]
 [1301748.28071761]]

计算损失:

from sklearn.metrics import mean_squared_error,r2_score
print('mean square error:', mean_squared_error(y_test,pred_test))
mean square error: 10305125663.199516

计算 r2_score:

print(r2_score(y_test,pred_test))
0.9174114106593986

关于如何使用梯度下降法实现,具体参考:线性回归模型的 MXNet 与 TensorFlow 实现

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,333评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,812评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,016评论 0 246
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,293评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,650评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,788评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,003评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,741评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,462评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,681评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,168评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,528评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,169评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,119评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,902评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,846评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,719评论 2 274

推荐阅读更多精彩内容