13-线性回归

2019-10-01  本文已影响0人  jxvl假装

线性回归

定义:线性回归通过一个或者多个自变量与因变量之间之间进行建模的回归分析。其中特点为一个或多个称为回归系数的模型参数的线性组合

一元线性回归:涉及到的变量只有一个
多元线性回归:涉及到的变量两个或两个以上

线性模型:


在这里插入图片描述 在这里插入图片描述

偏置参数对结果产生的影响小于权重参数,因为权重参数和数据组合在一起了

即,线性回归就是找到属性和权重的一种组合来预测结果

注意:线性回归不是只能用于线性数据,非线性数据也可以进行拟合

矩阵

大多数算法的计算基础


"""
数组和矩阵的区别
            数组                          矩阵
0维          5
1维        [2,3]
2维      [[2,3,4]]              必须是二维,满足了特定的运算需求
3维  [[[2,3,4]],[[2,5,5]]]

运算  加法、乘法         乘法:shape(m,n)的矩阵*shape(n,l)的矩阵 = shape(m,l)的矩阵
"""

import numpy as np

a = [[1,2,3,4],[5,6,7,8],[2,3,7,9]] #三个样本,四个特征
b = [2,2,2,2]   #四个特征的权重
# print(a)
print(np.multiply(a,b))
# print(np.multiply(a,[2]))

#矩阵运算
b = [[2],[2],[2],[2]]
print(np.dot(a,b))
"""运算结果
[[ 2  4  6  8]
 [10 12 14 16]
 [ 4  6 14 18]]
[[20]
 [52]
 [42]]
"""

线性回归策略、优化

损失函数

在这里插入图片描述

如何使得损失函数最小?寻找最优化的w值

减小损失函数的第一种方式:最小二乘法之正规方程

在这里插入图片描述
减小损失函数的第二种方式:最小二乘法之梯度下降
在这里插入图片描述
这里插入图片描述
是一个迭代的过程

api

在这里插入图片描述
"""线性回归策略、优化"""

# sklearn的优点:封装好,建立模型简单、预测简单
# sklearrn的缺点:算法的过程看不到,有些参数都在api内部

# tensorflow:封装高低的都有,自己实现线性回归,学习率等参数可以自己指定

"""
转换器的fit和transform再说明
fit:求得训练集的平均值、方差、最大值、最小值等训练集的固有属性,可以理解为一个训练的过程
transform:在fit的基础上(因为用到的一些参数是fit计算出来的),进行标准化、降维、归一化等操作(视转换器而定)
fit_transform = fit + transform
"""

"""案例:波士顿房价"""
#ps:线性回归和k-近邻都需要对数据进行标准化
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression,SGDRegressor
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

def mylinear():
    """
    线性回归直接预测房子价格
    :return: None
    """
    #获取数据
    lb = load_boston()
    #分割数据到训练集和测试集
    x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)
    #进行标准化处理:特征值要进行标准化处理,目标值也需要标准化处理。
    #为什么要对目标值进行标准化处理?因为进行计算用的是标准化后的特征值,如果不对目标值进行标准化,预测结果和目标值就会有较大的差距
    #所以,如果要查看实际的预测值,还需要查看标准化之前的数据,inverse_transform
    #要实例化两个标准化api,因为特征值和目标值的shape不一样

    print(y_train,y_test)   #查看一下数据格式
    std_x = StandardScaler()
    x_train = std_x.fit_transform(x_train)
    x_test = std_x.transform(x_test)
    # print(x_test.shape)


    std_y = StandardScaler()
    y_train = std_y.fit_transform(y_train.reshape(-1,1))
    y_test = std_y.transform(y_test.reshape(-1,1))
    #注意:转换器里面的数据必须要求是二维的,所以我们reshape了数据。x_train,x_test本身就是二维的

    #estimator预测
    #正规方程求解方式预测结果
    lr = LinearRegression()
    lr.fit(x_train,y_train)
    print("回归系数:\n",lr.coef_)
    y_predict = lr.predict(x_test)
    print("测试集里面每个房子的预测价格(标准化后):\n", y_predict)
    print("房子的预测价格:\n", std_y.inverse_transform(y_predict))

    #梯度下降进行房价预测
    sgd = SGDRegressor()    #这里的参数(如学习率等)全部采用默认值
    sgd.fit(x_train, y_train)
    print(sgd.coef_)
    #预测房子价格
    y_predict = std_y.inverse_transform(sgd.predict(x_test))
    print("预测的房子的价格是:\n", y_predict)
    return None


if __name__ == "__main__":
    mylinear()

回归性能评估

均方误差:Mean Squared Error(MSE)

在这里插入图片描述 api
在这里插入图片描述 在这里插入图片描述

正规方程和线性回归的对比

在这里插入图片描述

特点:线性回归器是最为简单、易用的回归模型。
从某种程度上限制了使用,尽管如此,在不知道特征之
间关系的前提下,我们仍然使用线性回归器作为大多数
系统的首要选择。
小规模数据:LinearRegression(不能解决拟合问题)以及其它
大规模数据:SGDRegressor

上一篇下一篇

猜你喜欢

热点阅读