Day13 线性回归实作

https://github.com/PacktPublishing/Machine-Learning-Algorithms

二维线性回归图

首先导入套件,上面的是用来算数学的;下面的是用来画画的,并且帮它们取绰号(np & plt)。

import numpy as np
import matplotlib.pyplot as plt

再来,用seed()随机产生整数的乱数後,使用最小平方差公式,定义损失函数。

np.random.seed(1000)
def loss(v):
    e = 0.0
    for i in range(nb_samples):
        e += np.square(v[0] + v[1]*X[i] - Y[i])
    return 0.5 * e 

接着,定义梯度下降法函数。

def gradient(v):
    g = np.zeros(shape=2)
    for i in range(nb_samples):
        g[0] += (v[0] + v[1]*X[i] - Y[i])
        g[1] += ((v[0] + v[1]*X[i] - Y[i]) * X[i])
    return g

最後,从scipy套件导入minimize最优化函数,就可以印出二维线性回归图了。

from scipy.optimize import minimize
result = minimize(fun=loss, x0=np.array([0.0, 0.0]), jac=gradient, method='L-BFGS-B')

https://ithelp.ithome.com.tw/upload/images/20210918/20137546Hcqh0hr1la.png

高维度线性回归

首先导入boston范例,将它印出看看长怎样。

from sklearn.datasets import load_boston
def show_dataset(data):
    fig, ax = plt.subplots(4, 3, figsize=(20, 15))
    for i in range(4):
        for j in range(3):
            ax[i, j].plot(data.data[:, i + (j + 1) * 3])
            ax[i, j].grid()
    plt.show()
boston = load_boston()
show_dataset(boston)     

https://ithelp.ithome.com.tw/upload/images/20210918/20137546ZhumHJgD1D.png

因为原始资料太少,所以把资料拆成训练用跟测试用来交叉验证,就是把资料切成K等分,K-1等分用来训练模型,就会迭代K次,最後,建模并训练模型。

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split, cross_val_score
X_train, X_test, Y_train, Y_test = train_test_split(boston.data, boston.target, test_size=0.1)
lr = LinearRegression(normalize=True)
lr.fit(X_train, Y_train)

再来,使用scikit-learn内建score()评估模型,计算准确率。

print('Score %.3f' % lr.score(X_test, Y_test)) // Score 0.693

接着,运用cross_val_score()选择评分测试方式,这里用负均方差。

from sklearn.model_selection import train_test_split, cross_val_score
scores = cross_val_score(lr, boston.data, boston.target, cv=7, scoring='neg_mean_squared_error')
print('CV Negative mean squared errors mean: %.3f' % scores.mean()) // CV Negative mean squared errors mean: -37.287
print('CV Negative mean squared errors std: %.3f' % scores.std()) // CV Negative mean squared errors std: 46.790

最後,计算实际结果与样本之间的差,越靠近1越好、越靠近0越不好。

r2_scores = cross_val_score(lr, boston.data, boston.target, cv=10, scoring='r2')
print('CV R2 score: %.3f' % r2_scores.mean()) // CV R2 score: 0.203

<<:  第 4 天 英雄有偶包怎麽办|*ngFor、JsonPipe、Angular Material、Mat-Card、Mat-Button

>>:  [Golang] Modules

18. 解释 JSONP 如何运作

(其实现在应该很少使用JSONP了,只是跟上一篇比较有关所以顺便整理,简单了解一下就好。) JSON...

2.4.15 Design System - Tabs

所有的安排都不一定会照着计画走 比如说以前的旅行可能会像是踩点一样 安排好很多个景点 在有限时间底...

C# .Net 使用 ADO.NET 连接资料库

什麽是 ADO.NET ADO.NET 是微软针对 .NET 平台所提供的负责资料存取的类别程序库,...

Day 04:.vue 档三层柜

继上篇观察整个专案资料夹结构之後,接着来观察子层 components 资料夹里的 HelloWor...

Domain Storytelling - 简单的方法说出一个Domain story

上篇回顾 Story Telling - 简易有效的讨论 讲到会议很烦很冗长没重点还要开好几次, 是...