Python学习笔记--机器学习基础算法3

回归算法–线性回归

1.目标值:连续值
2.线性回归:寻找一种能预测的趋势
3.线性关系:二维:直线关系
三维:特征、目标值、平面当中
定义:通过一个或者多个自变量与因变量之间进行建模的回归分析。其中可以为一个或多个自变量之间的线性组合
4.损失函数(误差大小)
最小二乘法(误差平方和)
正规方差:当特征过于复杂,速度慢
梯度下降:面对训练数据规模十分庞大的任务
理解:沿着这个函数下降的方向找,最后就能找到山谷的最低点,更新w值
sklearn线性回归正规方程、梯度下降API
sklearn.linear_model.LinearRegression()
正规方程
普通最小二乘线性回归
coef_:回归系数
sklearn,linear_model.SGDRegressor()
梯度下降
通过使用SGD最小化线性模型
coef_:回归系数
scikit-learn:
优点:封装好,建立模型简单,预测简单
缺点:算法的过程,有些参数都在算法API内部优化
tensorflow:封装高低,自己实现线性回归,学习率等

线性回归实例

1.sklearn线性回归正规方程、梯度下降
2.波士顿放假数据集分析流程
分析流程
1.波士顿地区房价数据获取
2.波士顿地区放假数据分割
3.训练与测试数据标准化处理
4.使用最简单的线性回归模型LinearRegression和梯度下降估计SGDRegressor对放假进行预测
0.19的python fit_transform和estmator要求目标值为是二维的。使用.reshape(-1,1)进行转换
5.回归性能评估:均方误差
sklearn.mean_squared_error(y_true,y_pred)
均方误差回归损失
y_true:真实值
y_pred:预测值
return:浮点数结果
注:真实值、预测值为标准化之前的值

def mylinerar():
    '''线性回归直接预测房子价格
    :return:None'''
    ##获取数据
    lb=load_boston()
    ##分割数据集到训练集和测试集
    x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)
    print(y_train,y_test)
    ##进行标准化处理
    #特征值和目标值都必须进行标准化处理,实例化两个标准化API
    std_x=StandardScaler()
    x_train=std_x.fit_transform(x_train)
    x_test=std_x.transform(x_test)
    ##目标值
    std_y=StandardScaler()
    std_y.fit_transform(y_train.reshape(-1,1))
    y_test=std_y.transform(y_test.reshape(-1,1))
    ##estimator预测
    ##正规方程求解方式预测结果
    lr=LinearRegression()

    lr.fit(x_train,y_train)
    print(lr.coef_)
    ##预测测试集的房子价格
    print('**'*20)
    y_lr_predict = std_y.inverse_transform(lr.predict(x_test).reshape(1, -1))
    print('正规方差的均方差测试集里面每个房子的预测价格:',y_lr_predict)
    print('正规方程的均方误差:',mean_squared_error(std_y.inverse_transform(y_test).reshape(1, -1),y_lr_predict))
    ##梯度下降预测房价
    sgd = SGDRegressor()

    sgd.fit(x_train, y_train)
    print(sgd.coef_)
    ##预测测试集的房子价格
    print('@@' * 20)
    y_sgd_predict = std_y.inverse_transform(sgd.predict(x_test).reshape(1, -1))
    print('梯度下降测试集里面每个房子的预测价格:', y_sgd_predict)
    print('梯度下降的均方误差:',mean_squared_error(std_y.inverse_transform(y_test).reshape(1, -1),y_sgd_predict))

梯度下降:需要学习率α 需要多次迭代 当特征数量n大时也能较好使用 适用于各种类型的模型
正规方程:不需要 一次运算得出 需要计算(XT X)-1 如果特征数量n大较大则运算代价大,因为矩阵逆的计算时间复杂度为O(n3 )通常来说n小于10K时还可以接受的 只适用于线性模型,不适合逻辑会过模型等其他模型

过拟合和欠拟合

过拟合:一个假设在数据上能够获得比其他假设更好的拟合,但是在训练数据外的数据集上却不能很好地拟合数据,此时认为这个假设出现了过拟合的现象。(模型过于复杂)
原因:原始特征过多,存在一些嘈杂特征,模型过于复杂是因为模型尝试去兼顾各个册数数据点
解决办法:进行特征选择
欠拟合:一个假设在训练数据上不能获得更好的拟合,但是在训练数据外的数据集上也不能很好地拟合(模型过于简单)
对线性模型进行训练学习会变成复杂模型
原因:学习到数据的特征过少
解决办法:增加数据的特征数量,消除关联性大的特征(难)
交叉验证(让所有数据都有过训练)
正则化(了解)
2.特征选择:过滤式–低方差特征
嵌入式:正则化、决策树、神经网络
L2正则化:
作用:可以使得w的每个元素都很小,都接近于0
优点:越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象
线性回归:LinearRegression 容易出现过拟合,为了把训练集数据表现好
可通过L2正则化解决-----------------Ridge:岭回归 带有正则化的线性回归,解决过拟合

带有正则化的线性回归-Ridge

sklearn.linear_model.Ridege
sklearn.linear_model.Ridege(alpha=1.0)
具有L2正则化的线性最小二乘法
alpha:正则化力度
coef_:回归系数
正则化力度越大,权重越趋近于0

 ##岭回归预测房价
 
    rd = Ridge(alpha=1.0)

    rd.fit(x_train, y_train)
    print(rd.coef_)
    ##预测测试集的房子价格
    print('$$' * 20)
    y_rd_predict = rd_y.inverse_transform(rd.predict(x_test).reshape(1, -1))
    print('岭回归测试集里面每个房子的预测价格:', y_rd_predict)
    print('岭回归的均方误差:', mean_squared_error(rd_y.inverse_transform(y_test).reshape(1, -1), y_rd_predict))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值