机器学习--岭回归,拉索回归,逻辑回归

宏观概念

机器学习建立模块化思维,同时python也建立调包导包思维(不是在调包,就是在导包)

机器学习的模块化是很严格的,第一块:(pandas数据清洗)导入数据(后续pandas还是另讲吧);第二块:划分数据集(人工对数据集进行一部分的筛选),第三块:特征工程(标注化归一化;特征选择与特征降维;在把数据转换为计算机认识的数据,中文英文文本,语音,字典列表等等数据转换)第四块:建立预估器,根据算法与数据加载模型(前面提到的KNN,随机森林,梯度下降,岭回归,拉索回归,逻辑回归等等都是算法,算法很厉害,但更多也只是代码的一个包,一个模块)第五块:保存模型与模型评估

到现在我感觉我们做的其实就是模型的部署与微调,难点是理解模型和与时俱进以及多个模块的叠加,会有大量的算法出现,过了初学阶段要保持终身学习

 岭回归

1.1岭回归的概念与损失函数公式

 

 岭回归是失损函数通过添加所有权重的平方和的乘积(L2)来惩罚模型的复杂度。均方差除以2是因为方便求导,w_j指所有的权重系数, λ指惩罚型系数,又叫正则项力度。

 1.2岭回归的特点

 在梯度下降中(以随机梯度下降为例),希望模型收敛即梯度变化率最小(现实中很难等于0),加了惩罚项后,因为加了惩罚项的平方(方便运算)损失函数的值会变大,精度会减少,但是整个损失函数的值减少,那么W的值也会减少减少系数估计的方差(特别是最小二乘法),让模型更加稳定,同时限制模型系数的大小,从而避免过拟合现象。

特点:1.岭回归不会将权重压缩到零,这意味着所有特征都会保留在模型中,但它们的权重会被缩小 2.适用于特征间存在多重共线性的情况 3.岭回归产生的模型通常更为平滑,因为它对所有特征都有影响。

1.3API的调用 

 具有L2正则化的线性回归-岭回归。
sklearn.linear_model.Ridge()       参数设置:
1.alpha, default=1.0,正则项力度(必须是非负浮点数。alpha 越大,正则化的影响越强。)2.fit_intercept, 是否计算偏置, default=True
3.solver, {‘auto’, ‘svd’, ‘cholesky’, ‘lsqr’, ‘sparse_cg’, ‘sag’, ‘saga’, ‘lbfgs’}, default=’auto’
当值为auto,并且数据庥、特征都比较大时,内部会随机梯度下降法

4.max_iterint, default=None,梯度解算器的最大迭代次数,默认为15000
(可能有人用过normalize,现在版本以及优化掉了,使用StandardScaler即可)

 1.4实例分析

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge
from sklearn.metrics import mean_squared_error
from sklearn.datasets import fetch_california_housing
housing = fetch_california_housing(data_home="./src")
x_train, x_test, y_train, y_test = train_test_split(housing.data, housing.target, random_state=22)
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
estimator = Ridge(alpha=0.5, max_iter=10000)
estimator.fit(x_train, y_train)
print("权重系数为:\n", estimator.coef_)  
print("偏置为:\n", estimator.intercept_)
y_predict = estimator.predict(x_test)
print("预测的数据集:\n", y_predict)
error = mean_squared_error(y_test, y_predict)
print("均方误差为:\n", error)

拉索回归

 2.1拉索回归概念与损失函数公式

Lasso回归是一种线性回归模型,它通过添加所有权重的绝对值之和(L1)来惩罚模型的复杂度。

Lasso回归的目标是最小化以下损失函数:(还是不同的算法)

  

 

其中:n 是样本数量,p 是特征的数量,y_i 是第 i 个样本的目标值,x_i 是第 i 个样本的特征向量,w是模型的参数向量,lambda 是正则化参数,控制正则化项的强度。

2.2拉索回归的特点与适用场景

特点:1.拉索回归可以将一些权重压缩到零,从而实现特征选择。这意味着模型最终可能只包含一部分特征。2.适用于特征数量远大于样本数量的情况,或者当特征间存在相关性时,可以从中选择最相关的特征。3.拉索回归产生的模型可能更简单,因为它会去除一些不重要的特征。

 2.3API

sklearn.linear_model.Lasso()    参数设置:

  1. alpha (float, default=1.0)2.fit_intercept (bool, default=True):是否计算此模型的截距。如果设置为 False,则不会使用截距(即数据应该已经被居中)。

  2. precompute (bool or array-like, default=False):

    如果为 True,则使用预计算的 Gram 矩阵来加速计算。如果为数组,则使用提供的 Gram 矩阵。
  3. copy_X (bool, default=True)  如果为 True,则复制数据 X,否则可能对其进行修改。

  4. max_iter (int, default=1000):  最大迭代次数。

  5. tol (float, default=1e-4):

    精度阈值。如果更新后的系数向量减去之前的系数向量的无穷范数除以 1 加上更新后的系数向量的无穷范数小于 tol,则认为收敛。
  6. warm_start (bool, default=False):

    当设置为 True 时,再次调用 fit 方法会重新使用之前调用 fit 方法的结果作为初始估计值,而不是清零它们。
  7. positive (bool, default=False):  当设置为 True 时,强制系数为非负。

  8. random_state (int, RandomState instance, default=None):

    随机数生成器的状态。用于随机初始化坐标下降算法中的随机选择。
  9. selection ({'cyclic', 'random'}, default='cyclic'):

    如果设置为 'random',则随机选择坐标进行更新。如果设置为 'cyclic',则按照循环顺序选择坐标。

属性:

  1. coef_  系数向量或者矩阵,代表了每个特征的权重。

  2. intercept_  截距项(如果 fit_intercept=True)。

  3. n_iter_  实际使用的迭代次数。

  4. n_features_in_ (int):   训练样本中特征的数量。

2.4实例分析 

from sklearn.datasets import fetch_california_housing
from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import numpy as np
data = fetch_california_housing(data_home="./src")
X, y = data.data, data.target
X_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
lasso = Lasso(alpha=0.1)  
lasso.fit(X_train, y_train)
print("权重系数为:\n", lasso.coef_) 
print("偏置为:\n", lasso.intercept_)
y_predict = lasso.predict(x_test)
print("预测的数据集:\n", y_predict)
error = mean_squared_error(y_test, y_predict)
print("均方误差为:\n", error)

 逻辑回归

 3.1逻辑回归概念

 逻辑回归(Logistic Regression)是机器学习中的一种分类模型,逻辑回归是一种分类算法,虽然名字中带有回归,但是它与回归之间有一定的联系。由于算法的简单和高效,在实际中应用非常广泛。逻辑回归一般用于二分类问题,比如:是好瓜还是坏瓜(往下看,这里疑惑正常)

 3.2逻辑回归原理

 逻辑回归的输入是线性回归 的输出

线性回归: h(w)=w_1x_1+w_2x_2+....+b

sigmoid激活函数 :f(x)=\frac{1}{1+e^{-x}}

sigmoid函数的值是在[0,1]区间中的一个概率值,默认为0.5为阈值可以自己设定,大于0.5认为是正例,小于则认为是负例

把上面的h(w) 线性的输出再输入到sigmoid函数当中 f(w)=\frac{1}{1+e^{-h(w)}}

 

 损失函数:

区别示意图: 

其实就把结果经过激活函数,然后按照阈值分类 

 3.3API

 sklearn.linear_model.LogisticRegression()      参数设置:
    fit_intercept bool, default=True 指定是否计算截距
    max_iter int, default=100  最大迭代次数。迭代达到此数目后,即使未收敛也会停止。
模型对象:
  .coef_ 权重    .intercept_ 偏置      predict()预测分类    predict_proba()预测分类(对应的概率)
  score()准确率

 3.4实例分析

import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
X,y = load_iris(return_X_y=True)
X=X[y!=2]
y=y[y!=2]
print(y)
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.25,random_state=33)
print(X_train.shape,y_train.shape)
model=LogisticRegression()
model.fit(X_train,y_train)
print(model.coef_)
print(model.intercept_)
y_predict=model.predict(X_test)
print(y_predict)
print(y_test)
proba=model.predict_proba(X_test)
print(model.score(X_test,y_test))

3.5补充 

 sigmoid激活函数是人们模仿人类神经元激活的过程,即一点一点激活,没激活0,激活了1,但是23年(还是22年)发文证明了其实并没有更好的表现,relu更好用一点

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值