机器学习day7-线性回归3、逻辑回归、聚类、SVC

news2024/11/23 19:46:15

7欠拟合与过拟合

1.欠拟合

模型在训练数据上表现不佳,在新的数据上也表现不佳,常发生在模型过于简单无法处理数据中的复杂模式时。

特征:

训练误差较高

测试误差也高

模型过于简化,不能充分学习训练数据中的模式

2.过拟合

模型在训练数据上表现得非常好,在新的数据上表现较差,常发生在模型过于复杂,学习了数据的真实模式、噪声和异常值。

特征:

训练误差非常低

测试误差较高

模型可能过于复杂,对训练数据过度拟合

3.正则化

防止过拟合,增加模型的鲁棒性(健壮性),让模型的泛化能力和推广能力更加强大。

当w越小公式的容错能力就越好,但w太小(趋近0)模型没有意义,w太大会把误差放大。正则项可以保证一定的容错率和正确率。

正则化(鲁棒性调优)本质是牺牲模型在训练集上的正确率来提高推广、泛化能力,w在数值上越小越好,这样能抵抗数值的扰动。

将原来的损失函数加上一个惩罚项使得计算出来的模型W相对小一些来带来泛化能力,就是正则化。

常用的惩罚项有:

$$
L1正则项:L1=||w||_1=\textstyle\sum_{i=1}^{n}|w_i|,曼哈顿距离
$$

$$
L2正则项:L2=||w||_2=\textstyle\sqrt[p]{\sum_{i=1}^{n}x^p_i,X=(x_1,x_2,...x_n)},欧式距离
$$

代表空间中向量到原点的距离。L1和L2正则项惩罚项可以加到任何算法的损失函数上去提高模型的泛化能力。

8岭回归Ridge

1.损失函数公式

岭回归=多元线性回归损失函数+L2正则

$$
J(w) = \frac{1}{2m} \sum_{i=1}^{m} (h_w(x^{(i)}) - y^{(i)})^2+\lambda\sum_{j=1}^{n} w_j^2,w_j指所有的权重系数, λ指惩罚型系数,又叫正则项力度
$$

特点:

不会将权重压缩到0,会把权重缩小(所有的特征都会被保留)

特征见存在多重共线性

模型更为平滑

API
具有L2正则化的线性回归-岭回归。
sklearn.linear_model.Ridge()
1 参数:
(1)alpha, default=1.0,正则项力度
(2)fit_intercept, 是否计算偏置, default=True
(3)solver, {‘auto’, ‘svd’, ‘cholesky’, ‘lsqr’, ‘sparse_cg’, ‘sag’, ‘saga’, ‘lbfgs’}, default=’auto’
当值为auto,并且数据量、特征都比较大时,内部会随机梯度下降法。
(4)normalize:,default=True, 数据进行标准化,如果特征工程中已经做过标准化,这里就该设置为False
(5)max_iterint, default=None,梯度解算器的最大迭代次数,默认为15000
​
2 属性
coef_ 回归后的权重系数
intercept_ 偏置
​
​
说明:SGDRegressor也可以做岭回归的事情,比如SGDRegressor(penalty='l2',loss="squared_loss"),但是其中梯度下降法有些不同。所以推荐使用Ridge实现岭回归

eg1
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error
import math
import random
# 加载数据集
data=fetch_california_housing(data_home="./src")
​
x=data.data
y=data.target
​
# 数据标准化
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2)
def train():
    # 配置一些训练参数
    eta0=0.001
    epoch=1000
    batch_size=16
    n_sample=len(x_train)#样本数量,假设是20000个
    model=Ridge()
    model.fit(x_train,y_train)
    s=model.score(x_test,y_test)
    print(s)        
train()

9拉索回归Lasso

线性回归模式,拉索回归=+L1正则

目标是最小化损失函数

$$
\text{J(w)}= \frac{1}{2n}\sum_{i=1}^n (h_w(x_i)-y_i)^2 + \lambda \sum_{j=1}^p |w_j|
$$

$$
n 是样本数量, p 是特征的数量, y_i 是第 i个样本的目标值, x_i 是第 i个样本的特征向量, w是模型的参数向量
$$

$$
\lambda是正则化参数,控制正则化项的强度。
$$

特点

拉索回归可以将一些权重压缩到0,可能模型最终只包含一部分特征

适用于特征数量远大于样本数量的情况,或者特征间存在相关性时可以从中选择最相关的特征

模型会更简单(去除了一些不重要的特征)

API
sklearn.linear_model.Lasso()
​
参数:
​
1. alpha (float, default=1.0):
   - 控制正则化强度;必须是非负浮点数。较大的 alpha 增加了正则化强度。
2. fit_intercept (bool, default=True):
   - 是否计算此模型的截距。如果设置为 False,则不会使用截距(即数据应该已经被居中)。
3. precompute (bool or array-like, default=False):
   - 如果为 True,则使用预计算的 Gram 矩阵来加速计算。如果为数组,则使用提供的 Gram 矩阵。
4. copy_X (bool, default=True):
   - 如果为 True,则复制数据 X,否则可能对其进行修改。
5. max_iter (int, default=1000):
   - 最大迭代次数。
6. tol (float, default=1e-4):
   - 精度阈值。如果更新后的系数向量减去之前的系数向量的无穷范数除以 1 加上更新后的系数向量的无穷范数小于 tol,则认为收敛。
7. warm_start (bool, default=False):
   - 当设置为 True 时,再次调用 fit 方法会重新使用之前调用 fit 方法的结果作为初始估计值,而不是清零它们。
8. positive (bool, default=False):
   - 当设置为 True 时,强制系数为非负。
9. random_state (int, RandomState instance, default=None):
   - 随机数生成器的状态。用于随机初始化坐标下降算法中的随机选择。
10. selection ({'cyclic', 'random'}, default='cyclic'):
    - 如果设置为 'random',则随机选择坐标进行更新。如果设置为 'cyclic',则按照循环顺序选择坐标。
​
属性:
​
1. coef_
   - 系数向量或者矩阵,代表了每个特征的权重。
2. intercept_ 
   - 截距项(如果 fit_intercept=True)。
3. n_iter_ 
   - 实际使用的迭代次数。
4. n_features_in_ (int):
   - 训练样本中特征的数量。
​
eg2
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Lasso
from sklearn.metrics import mean_squared_error
import math
import random
def data_load():
    data = fetch_california_housing(data_home="./src")
    X_train, X_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=42)
    return X_train, X_test, y_train, y_test
def train(X_train, y_train):
    model=Lasso(alpha=0.01)
    model.fit(X_train, y_train)
    return model
def test(model, X_test, y_test):
    y_pred=model.predict(X_test)
    mse=mean_squared_error(y_test, y_pred)
    rmse=math.sqrt(mse)
    return rmse
X_train, X_test, y_train, y_test=data_load()
model=train(X_train,y_train)
s=test(model,x_test,y_test)
print(s)
print(model.coef_)
y=model.predict(x_test[0:4])
print(y)
s=model.score(X_test,y_test)
print(s)

十二逻辑回归-分类

1概念

分类模型,常用于处理二分类问题

2原理

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

①.样本特征值x输入,和线性回归

$$
h(w)=w_1x_1+w_2x_2+....+b
$$

求出的w做计算,得到逻辑回归的输入

②.输入和sigmoid激活函数

$$
f(x)=\frac{1}{1+e^{-x}}
$$

做运算,得到[0,1]区间内的一个概率值

此时的损失函数为:

③.设定一个阈值(一般是0.5),大于阈值认为是正例,输出1;小于阈值认为是负例,输出0

④.将③输出的结果和真实数据的y/结果/目标值作对比判断是否一致,如果不一致则继续调整w去提高1降低0的比例

3API

sklearn.linear_model.LogisticRegression()
参数:
    fit_intercept bool, default=True 指定是否计算截距
    max_iter int, default=100  最大迭代次数。迭代达到此数目后,即使未收敛也会停止。
模型对象:
  .coef_ 权重
  .intercept_ 偏置
  predict()预测分类
  predict_proba()预测分类(对应的概率)
  score()准确率
eg3
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
x,y=load_iris(return_X_y=True)
index=y!=2
y=y[index]
x=x[index]
​
x_train,x_test,y_train,y_test=train_test_split(x,y,train_size=0.8)
# print(x.shape)
# print(y!=2)
​
print(y)
print(x.shape)
model=LogisticRegression()
model.fit(x_train,y_train)
y_pred=model.predict(x_test)
s=sum(y_test==y_pred)
print(s)
# new_x=[[4.3,2.5,7.2,2.5]]
# y_predd=model.predict(x[0:5])
# print(y_predd)

十三聚类

十四支持向量机

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2246208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【云计算】腾讯云架构高级工程师认证TCP--考纲例题,知识点总结

【云计算】腾讯云架构高级工程师认证TCCP–知识点总结,排版整理 文章目录 1、云计算架构概论1.1 五大版块知识点(架构设计,基础服务,高阶技术,安全,上云)1.2 课程详细目录1.3 云基础架构设计1.4…

proto3语法详解

proto3语法详解 字段规则消息类型的定义与使⽤定义使用 enum类型定义与使用定义规则定义时注意事项 Any类型Any类型介绍Any类型使用 oneof类型oneof类型的介绍oneof类型的使用 map类型map类型的介绍map类型的使用 默认值更新消息更新规则保留字段reserved 未知字段未知字段获取…

【STM32】在 STM32 USB 设备库添加新的设备类

说实话,我非常想吐槽 STM32 的 USB device library,总感觉很混乱。 USB Device library architecture 根据架构图: Adding a custom class 如果你想添加新的设备类,必须修改的文件有 usbd_desc.cusbd_conf.cusb_device.c 需要…

怎么编译OpenWrt镜像?-基于Widora开发板

1.准备相应的环境,我使用的环境是VMware16ubuntu20.04,如图1所示安装编译所需的依赖包; sudo apt-get install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 unzip zlib1g-…

神经网络问题之一:梯度消失(Vanishing Gradient)

梯度消失(Vanishing Gradient)问题是深度神经网络训练中的一个关键问题,它主要发生在反向传播过程中,导致靠近输入层的权重更新变得非常缓慢甚至几乎停滞,严重影响网络的训练效果和性能。 图1 在深度神经网络中容易出现…

JavaWeb之综合案例

前言 这一节讲一个案例 1. 环境搭建 然后就是把这些数据全部用到sql语句中执行 2.查询所有-后台&前台 我们先写后台代码 2.1 后台 2.2 Dao BrandMapper: 注意因为数据库里面的名称是下划线分割的,我们类里面是驼峰的,所以要映射 …

PLC与PLC跨网段通讯的几种方法:厂区组网实践

PLC通常通过以太网或其他工业网络协议(如PROFINET、Modbus TCP等)进行通信。当PLC位于不同的网段时,它们不能直接通信,需要特殊的配置或设备来实现通信,不同网段的PLC通讯变得尤为重要。 随着工业网络的发展和工业4.0概…

原生openGauss与Oracle数据库函数兼容性对比验证测试

———————————————— 一、测试目的 近期在进行调研去O,为此研究了下原生openGauss和Oracle数据库兼容性,特整理测试了Oracle常用函数和openGauss数据库的对比测试。 二、创建DUAL虚拟表 openGauss 数据库不提供DUAL虚拟表,需要通过如下方…

创建HTTPS网站

每天,我们都会听到网络上发生身份盗窃和数据侵权的案例,这导致用户对自己访问的网站更加怀疑。他们开始更加了解自己将个人信息放在哪里以及信任哪些类型的网站。了解如何使网站使用HTTPS变得比以往任何时候都更加重要。 解读缩略词:HTTP与HT…

Bokeh实现大规模数据可视化的最佳实践

目录 引言 一、Bokeh简介 二、安装Bokeh 三、数据准备 四、性能优化 五、创建图表 六、添加交互功能 七、应用案例 八、高级技巧 九、总结 引言 在数据科学领域,数据可视化是一个至关重要的环节。通过可视化,我们可以直观地理解数据的特征和趋势,为数据分析和决策…

数据结构-8.Java. 七大排序算法(上篇)

本篇博客给大家带来的是排序的知识点, 由于时间有限, 分两天来写, 上篇主要实现 前四种排序算法: 直接插入, 希尔, 选择, 堆排。 文章专栏: Java-数据结构 若有问题 评论区见 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 …

HARCT 2025 新增分论坛7:机器人和自动化的新趋势

会议名称:机电液一体化与先进机器人控制技术国际会议 会议简称:HARCT 2025 大会时间:2025年1月3日-6日 大会地点:中国桂林 主办单位:桂林航天工业学院、广西大学、桂林电子科技大学、桂林理工大学 协办单位&#…

海洋通信船舶组网工业4G路由器应用

船舶是浩瀚海洋中探索与贸易的载体,更是船员们生活与工作的家园。为了在广阔的水域中搭建起稳定、高效的网络桥梁,工业4G路由器以卓越的通信组网能力,为船舶组网提供网络支持。 工业4G路由器以其强大的信号发射能力,确保船舶内部…

《Vue零基础入门教程》第三课:起步案例

往期内容 《Vue零基础入门教程》第一课:Vue简介 《Vue零基础入门教程》第二课:搭建开发环境 做为第一个案例, 主要给大家介绍vue的最基本使用. vue使用的3步曲(重点) 引入vue.js编写页面(视图)创建App实例并挂载 1) 引入vue.js 在html的头部, 通过…

【unity小技巧】一些unity3D灯光的使用与渲染及性能优化方案

文章目录 天空盒反射配置太阳耀斑眩光烘培光照烘培光照时弹出错误,记得勾选模型下面的选择阴影项目配置光源模型模型shader的问题 全局光照混合光照模式混合照明模式减性照明模式Shadowmask照明模式间接烘焙照明模式 环境光遮罩灯光探针反射探针技术关闭反射探针可以…

【单元测试】【Android】JUnit 4 和 JUnit 5 的差异记录

背景 Jetbrain IDE 支持生成 Test 类,其中选择JUnit5 和 JUnit,但是感觉这不是标准的单元测试,因为接口命名吧。 差异对比 两者生成的单测API名称同原API,没加test前缀的。使用差异主要表现在: setUp & …

Nuxt3:拉取项目模板失败问题解决方法

问题描述 使用官网提供的命令npx nuxilatest init <project-name> 创建Nuxt3项目时&#xff0c;遇到了拉取项目模板失败的问题&#xff0c;报错信息如下 先分析一下这行命令在做的事情&#xff0c;结合之前的经验来看&#xff0c;似乎是在尝试通过该网址返回的元数据信息…

在 Sui 区块链上创建、部署与测试自定义 move _coin合约的完整教程

系列文章目录&#x1f60a; Task1&#xff1a;hello_move&#x1f340; Task2&#xff1a;move_coin&#x1f340; Task3&#xff1a;move_nft&#x1f340; 目录 系列文章目录&#x1f60a;引言一、更新本地代码1、查看当前项目的远程仓库信息。2、将远程仓库的最新代码同步到…

三层交换机静态路由实验

1、前置知识 2、实验目的 3、实验器材&#xff1a; 3560-23PS交换机2台、主机4台、交叉线1根和直通网线4根。 4、实验规划及拓扑 实验要求&#xff1a; &#xff08;1&#xff09;在交换机A和交换机B上分别划分基于端口的VLAN&#xff1a; 交换机 VLAN 端口成员 交换机…

iOS构建版本以及Hbuilder打iOS的ipa包全流程

目录 Hbuilder打ipa包 打包之前进行应用配置 应用版本号设置 使用广告标识设置 iOS-云打包 下载并转移安装包 使用Transporter提交版本 应用简介 下载应用 账号登录 提交安装包到apple store connect 在apple开发者平台上确认 总结 本篇文章详细的介绍了使用Hbuil…