sklearn 回归和聚类

回归和聚类

线性回归

线性回归的目标值为连续性数据
定义:利用回归方程(函数)对一个或多个自变量(特征值)和应变量(目标值)之间的关系进行建模的一种分析方式。

线性模型: y = ∑ i = 1 w i ∗ x i y = \sum_{i=1}{w_i*x_i} y=i=1wixi

线性回归的损失和优化原理

线性回归的目标是求解模型参数,即 w i w_i wi
线性回归流程:

  1. 随意假定 w i w_i wi
  2. 对比预测值和目标值,通过迭代更新 w i w_i wi的值来减小误差。

为对比预测值和目标值的差距,定义损失函数/cost/成本函数来衡量误差的大小

损失函数

定义损失函数(最小二乘法): J ( θ ) = ∑ i = 1 m ( h w ( x i ) − y i ) 2 J(\theta)=\sum_{i=1}^{m}{(h_w(x_i)-y_i)^2} J(θ)=i=1m(hw(xi)yi)2
其中:

  • y i y_i yi为第i个样本的真实值。
  • h w ( x i ) h_w(x_i) hw(xi)为第i个样本特征值组合预测函数值。
优化方法

介绍两种优化方法:

  1. 正规方程: w = ( X T X ) − 1 X T y w=(X^TX)^{-1}X^Ty w=(XTX)1XTy,通过特征值和目标值直接求解系数(当特征值较多时,求解效率过低
  2. 梯度下降
    在这里插入图片描述

梯度下降法算法会计算损失曲线在起点处的梯度。简而言之,梯度是偏导数的矢量;它可以让您了解哪个方向距离目标“更近”或“更远”。请注意,损失相对于单个权重的梯度就等于导数。

梯度矢量具有方向和大小。梯度下降法算法用梯度乘以一个称为 学习速率(有时也称为步长) 的标量,以确定下一个点的位置。例如,如果梯度大小为 2.5,学习速率为 0.01,则梯度下降法算法会选择距离前一个点 0.025 的位置作为下一个点。

线性回归模型评估

均方误差(MSE)评估机制:
M S E = 1 m ∑ i = 1 m ( y i − E ( y ) ) 2 MSE = {\frac{1}{m}}\sum_{i=1}^{m}(y^i-E(y))^2 MSE=m1i=1m(yiE(y))2

api

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import SGDRegressor
from sklearn.metrics import mean_squared_error

boston = load_boston()

x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22)

transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)

estimator = SGDRegressor(max_iter=10000, eta0=0.001)
estimator.fit(x_train, y_train)
print("梯度下降-权重系数\n", estimator.coef_)
print("梯度下降-偏置\n", estimator.intercept_)

y_predict = estimator.predict(x_test)
error = mean_squared_error(y_test, y_predict)
print("梯度下降-误差\n", error)

欠拟合和过拟合

  • 欠拟合
    • 原因:学习到的数据特征过少,在测试集中误差较大
    • 解决方法:增加数据的特征数量
  • 过拟合
    • 原始特征过多,存在一些嘈杂特征。
    • 正则化
      在这里插入图片描述

如上图所示,很显然图二的效果最佳,图一为 欠拟合 ,图三为 过拟合

正则化

  • L2正则化(更加常用):让特征的系数都很小,接近于0,削弱一些特征的影响
    • 损失函数: J ( w ) = 1 2 m ∑ i = 1 m ( h w ( x i ) − y i ) 2 − λ ∑ j = 1 n w j 2 J(w) = \frac{1}{2m}\sum_{i=1}^{m}(h_w(x_i)-y_i)^2 - \lambda \sum_{j=1}^{n}w_j^2 J(w)=2m1i=1m(hw(xi)yi)2λj=1nwj2
    • 上式中2m目的是方便求导,与损失函数的主要差别为加入惩罚项,目的是减小每一个特征值的系数 λ \lambda λ也是一个超参数,是惩罚项的步长
    • Ridge->岭回归
  • L1正则化:直接让一些系数为0,删除某个特征的影响
    • 损失函数: J ( w ) = 1 2 m ∑ i = 1 m ( h w ( x i ) − y i ) 2 − λ ∑ j = 1 n ∣ w j ∣ J(w) = \frac{1}{2m}\sum_{i=1}^{m}(h_w(x_i)-y_i)^2 - \lambda \sum_{j=1}^{n}|w_j| J(w)=2m1i=1m(hw(xi)yi)2λj=1nwj
    • 上式与L2的区别主要是平方项变为绝对值项。

岭回归

是一种线性回归的改进(带L2正则化的线性回归)。这里主要探究一下 λ \lambda λ值对实际效果的影响:
在这里插入图片描述

由上图可知:

  • λ \lambda λ的值变大时,特征值的系数会变小。
  • λ \lambda λ的值变小时,特征值的系数会变大。

利用这点我们就可以减少部分特征值的影响

api

from sklearn.linear_model import Ridge

estimator = Ridge()

其余代码均与线性回归相同

逻辑回归

实际上是一个分类算法,有以下应用场景:

  • 广告点击率
  • 是否为垃圾邮件
    还有很多例子,逻辑回归主要解决的问题是二分类问题

逻辑回归原理

  • 输入:$ y = \sum_{i=1}{w_i*x_i}$,与线性回归的输出相同
  • 激活函数(sigmoid函数): g ( θ T x ) = 1 1 + e − θ x g(\theta^Tx) = \frac{1}{1+e^{-\theta x}} g(θTx)=1+eθx1
    • 输出为[0, 1]区间上的一个值,默认0.5为阈值

在这里插入图片描述

  • 损失函数:采用对数似然损失
    • 单一样本: c o s t ( h θ ( x ) , y ) = { − l o g ( h θ ( x ) ) y = = 1 − l o g ( 1 − h θ ( x ) ) y = = 0 cost(h_\theta(x),y) = \begin{cases} -log(h_\theta(x)) \qquad \quad \quad y==1\\ -log(1-h_\theta(x))\qquad \quad y==0 \\ \end{cases} cost(hθ(x),y)={log(hθ(x))y==1log(1hθ(x))y==0

    • 完整损失函数: c o s t ( h θ ( x ) , y ) = ∑ i = 1 m − y i l o g ( h θ ( x ) ) − ( 1 − y i ) l o g ( 1 − h θ ( x ) ) cost(h_\theta(x),y) = \sum_{i=1}^{m}-y_ilog(h_\theta(x))-(1-y_i)log(1-h_\theta(x)) cost(hθ(x),y)=i=1myilog(hθ(x))(1yi)log(1hθ(x))

api

from sklearn.linear_model import LogisticRegression

estimator = LogisticRegression()
estimator.fit(x_train, y_train)

分类评估方式

同样,也可以利用estimator.score(x_test, y_test)来获取模型的准确率,但是对于分类问题这样还是不够的。我们需要得到判断为真时实际为真的概率、判断为假实际为真的概率等,具体如下图(混淆矩阵):
在这里插入图片描述

  • 准确率:预测结果为正例样本中真实为正例的比例
  • 召回率:真实为正例的样本中预测结果为正例的本例
api
from sklearn.metrics import classification_report

report = classification_report(y_test, y_predict, labels=[2,4], target_names=["良性", "恶性"])

也可以用AUC进行评价二分类

无监督学习 K-means算法

无监督学习特点:无目标值。例如:

  • 根据人口学特征和购买习惯将美国人口分成不同小组,以便广告接触目标客户。

K-means原理

在这里插入图片描述

  1. 随机设置K(超参数)个特征空间的点作为初始的聚类中心。
  2. 计算其他每个点到K个中心的距离,为支点选择最近的一个聚类中心作为标记类别。
  3. 接着对标记的聚类中心后,重新计算出每个聚类的新中心点(平均值)
  4. 如果计算出的新中心点和原中心点(最开始选定的中心点)一样,则结束,否则重复第二步

K-means模型评估

引入轮廓系数概念 S C i = b i − a i m a x ( b i , a i ) SC_i = \frac{b_i-a_i}{max(b_i,a_i)} SCi=max(bi,ai)biai

  • 每个点i为聚类数据中的样本
  • b i b_i bi为到其他族群所有样本的距离最小值
  • a i a_i ai为到本身族群所有样本的距离平均

简而言之,就是外部距离最大化,内部距离最小化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zccccccc_tz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值