第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Python機(jī)器學(xué)習(xí)算法之線性回歸算法

1.算法概述

回归就是用一条曲线对数据点进行拟合,该曲线称为最佳拟合曲线,这个拟合过程称为回归。当该曲线是一条直线时,就是线性回归。
线性回归(Linear Regression)是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖关系的一种统计分析方法。
线性回归一般用来做连续值的预测,预测的结果是一个连续值。
线性回归在训练学习样本时,不仅需要提供特征向量X,还需要提供样本的实际结果(标记label),因此线性回归模型属于监督学习里的回归模型。

2.算法步骤

图片描述
加载数据集
数据预处理
建立线性回归模型
极小化损失函数
参数求解
模型检验
经济预测

3.梯度下降法

图片描述

图片描述

4.最小二乘法

图片描述

5.算法实现

自定义实现

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

# 构造训练数据
x = np.arange(0., 10., 0.2)
m = len(x)
x0 = np.full(m, 1.0)
input_data = np.vstack([x0, x]).T
target_data = 2 * x + 5 + np.random.randn(m)

# 终止条件
loop_max = 10000  # 最大迭代次数
epsilon = 1e-3    # 收敛条件最小值

# 初始化权值
np.random.seed(0)
theta = np.random.randn(2)
alpha = 0.001  # 步长
diff = 0.
error = np.zeros(2)
count = 0  # 循环次数
finish = 0  # 终止标志

# 迭代
while count < loop_max:
    count += 1
    # 在标准梯度下降中,权值更新的每一步对多个样例求和,需要更多的计算
    sum_m = np.zeros(2)
    for i in range(m):
        dif = (np.dot(theta, input_data[i]) - target_data[i]) * input_data[i]
        # 当alpha取值过大时,sum_m会在迭代过程中会溢出
        sum_m = sum_m + dif

    # 注意步长alpha的取值,过大会导致振荡
    theta = theta - alpha * sum_m

    # 判断是否已收敛
    if np.linalg.norm(theta - error) < epsilon:
        finish = 1
        break
    else:
        error = theta

    print('迭代次数 = %d' % count, '\t w:', theta)
print('迭代次数 = %d' % count, '\t w:', theta)

# 用scipy线性回归进行检查
slope, intercept, r_value, p_value, slope_std_error = stats.linregress(x, 
                                                                       target_data)
print('截距 = %s 斜率 = %s' % (intercept, slope))

# 用plot进行展示
plt.plot(x, target_data, 'b*')
plt.plot(x, theta[1] * x + theta[0], 'r')
plt.xlabel("x")
plt.ylabel("y")
plt.show()

利用Sklearn库实现

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

from sklearn import datasets
from sklearn.linear_model import LinearRegression

boston_dataset = datasets.load_boston()
data = pd.DataFrame(boston_dataset.data)
data.columns = boston_dataset.feature_names
data['PRICE'] = boston_dataset.target

# 取出房间数和房价并转化成矩阵形式
x = data.loc[:, 'RM'].as_matrix(columns=None)
y = data.loc[:, 'PRICE'].as_matrix(columns=None)

# 进行矩阵的转置
x = np.array([x]).T
y = np.array([y]).T

# 训练线性模型
l = LinearRegression()
l.fit(x, y)

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.scatter(x, y, s=10, alpha=0.5, c='green')
plt.plot(x, l.predict(x), c='blue', linewidth='1')
plt.xlabel("房间数(Number)")
plt.ylabel("房价(Price)")
plt.show()

6.算法优化

当数据间存在线性关系时,用普通的最小二乘法建模得到的结果误差会很大,甚至会出现和实际相悖的情况,在这种情况下,普通最小二乘法是失效的。而化学家
S. Wold于1983年提出的偏最小二乘法在某种程度上改善了普通最小二乘法对变量间存在线性关系时建模的弊端。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消