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

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)

十三聚类

十四支持向量机

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【鸿蒙开发】第二十二章 IPC与RPC进程间通讯服务

目录 1 IPC与RPC通信概述 2 实现原理 3 约束与限制 4 使用场景 5 开发步骤 5.1 Native侧开发步骤 5.2 ArkTS侧开发步骤 6 远端状态订阅开发实例 6.1 使用场景 6.1.1 Native侧接口 6.2 ArkTS侧接口 6.3 Stub感知Proxy消亡(匿名Stub的使用) 1 …

【开发小技巧11】用经典报表实现badge list效果,根据回显内容用颜色加以区分

之前使用badge list实现首页指标数据回显,但是无法根据对应数据进行个性化动态展示,那要如何解决呢?下面就来看看如何通过经典报表实现badge list效果,根据回显内容用颜色加以区分。 普通经典报表 想要做成类似这样的效果并且能…

rust中解决DPI-1047: Cannot locate a 64-bit Oracle Client library问题

我们在使用rust-oracle crate连接oracle进行测试的过程中,会发现无法连接oracle,测试运行过程中抛出“DPI-1047: Cannot locate a 64-bit Oracle Client library”错误。该问题是由于rust-oracle需要用到oracle的动态连接库,我们通过安装orac…

cocos creator 3.8 一些简单的操作技巧,材质的创建 1

这是一个飞机的3D模型与贴图 导入到cocos中,法线模型文件中已经包含了mesh、material、prefab,也就是模型、材质与预制。界面上创建一个空节点Plane,将模型直接拖入到Plane下。新建材质如图下 Effect属性选择builtin-unlit,不需…

python oa服务器巡检报告脚本的重构和修改(适应数盾OTP)有空再去改

Two-Step Vertification required: Please enter the mobile app OTPverification code: 01.因为巡检的服务器要双因子认证登录,也就是登录堡垒机时还要输入验证码。这对我的巡检查服务器的工作带来了不便。它的机制是每一次登录,算一次会话…

数据集-目标检测系列- 荷花 莲花 检测数据集 lotus>> DataBall

数据集-目标检测系列- 荷花 莲花 检测数据集 lotus>> DataBall DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 贵在坚持! 数据样例项目地址: * 相关项目 1)数据集可视化项…

操作系统——揭开盖子

计算机执行时——取指执行 es:bx等于从0x9000开始,到0x90200结束

CTF 攻防世界 Web: SSRF Me write-up

题目名称-SSRF ME captcha 解码 目录扫描没有发现有用结果,根据提示 url 可能用来访问内部资源,根据题目名称可以猜测 ssrf。 其中 Captcha 用到 md5 加密截取,而且在每一次刷新网页时候会改变,可以写代码爆力枚举 Captcha 的值…

医学图像语义分割:前列腺肿瘤、颅脑肿瘤、腹部多脏器 MRI、肝脏 CT、3D肝脏、心室

医学图像语义分割:前列腺肿瘤、颅脑肿瘤、腹部多脏器 MRI、肝脏 CT、3D肝脏、心室 语义分割网络FCN:通过将全连接层替换为卷积层并使用反卷积上采样,实现了第一个端到端的像素级分割网络U-Net:采用对称的U形编解码器结构&#xff…

WPF窗体基本知识-笔记-命名空间

窗体程序关闭方式 命名空间:可以理解命名空间的作用为引用下面的控件对象 给控件命名:一般都用x:Name,也可以用Name但是有的控件不支持 布局控件(容器)的类型 布局控件继承于Panel的控件,其中下面的border不是布局控件,panel是抽象类 在重叠的情况下,Zindex值越大的就在上面 Z…

pytorch官方FasterRCNN代码详解

本博文转自捋一捋pytorch官方FasterRCNN代码 - 知乎 (zhihu.com),增加了其中代码的更详细的解读,以帮助自己理解该代码。 代码理解的参考Faster-RCNN全面解读(手把手带你分析代码实现)---前向传播部分_手把手faster rcnn-CSDN博客 1. 代码结构 作为 to…

大数运算(加减乘除和输入、输出模块)

为什么会有大数呢?因为long long通常为64位范围约为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807,最多也就19位,那么超过19位的如何计算呢?这就引申出来大数了。 本博客适合思考过这道题,但是没做出来或…

Excel的图表使用和导出准备

目的 导出Excel图表是很多软件要求的功能之一,那如何导出Excel图表呢?或者说如何使用Excel图表。 一种方法是软件生成图片,然后把图片写到Excel上,这种方式,因为格式种种原因,导出的图片不漂亮&#xff0c…

LLM: AI Mathematical Olympiad (下)

文章目录 一、SC-TIR策略(工具整合推理)二、SC-TIR原理三、避免过拟合四、代码分析1、Main函数2、SC-TIR control flow3、Extract answer4、Execute completion 总结 本文较长分成两个部分分析 | ू•ૅω•́)ᵎᵎᵎ 第一部分:预备知识介绍和…

06、Spring AOP

在我们接下来聊Spring AOP之前我们先了解一下设计模式中的代理模式。 一、代理模式 代理模式是23种设计模式中的一种,它属于结构型设计模式。 对于代理模式的理解: 程序中对象A与对象B无法直接交互,如:有人要找某个公司的老总得先打前台登记传达程序中某个功能需要在原基…

前端vue调试样式方法

1.选中要修改的下拉框&#xff0c;找到对应的标签的class样式 2.在浏览器中添加width宽度样式覆盖原有的样式&#xff0c;如果生效后说明class对了&#xff0c;则到vue页面的strye中添加覆盖样式 <style> :deep(.el-select){width: 180px; } </style>3.寻找自定义…

刷写树莓派系统

一. 树莓派做smb文件服务器参考视频 click here 二. 在官网上下载适合自己树莓派型号的镜像文件 三. 使用官方的riprpi-imager刷写软件 可以自动将TF卡(micro sd卡)格式化为适合树莓派系统运行的文件格式Fat32。就无需自己手动格式化进行刷写。 四. 出现文件验证失败 先把…

Python中的XGBOOST算法实现详解

文章目录 Python中的XGBOOST算法实现详解一、引言二、XGBoost算法原理与Python实现1、XGBoost算法原理1.1、目标函数的二阶泰勒展开 2、Python实现XGBoost2.1、环境准备2.2、导入库2.3、数据准备2.4、数据拆分2.5、模型训练2.6、模型预测与评估2.7、特征重要性可视化 三、总结 …

android 使用MediaPlayer实现音乐播放--权限请求

在Android应用中&#xff0c;获取本地音乐文件的权限是实现音乐扫描功能的关键步骤之一。随着Android版本的不断更新&#xff0c;从Android 6.0&#xff08;API级别23&#xff09;开始&#xff0c;应用需要动态请求权限&#xff0c;而到了android 13以上需要的权限又做了进一步…

Docker 容器化开发 应用

Docker 常用命令 存储 - 目录挂载 存储 卷映射 自定义网络 Docker Compose语法 Dockerfile - 制作镜像 镜像分层机制 完结