【机器学习】逻辑回归(二元分类)

news2025/3/15 18:25:35

文章目录

  • 感知器的种类
  • sigmoid(logistics)函数
  • 代价/损失函数(cost function)——对数损失函数(log loss function)
  • 梯度下降算法(gradient descent algorithm)
  • 正则化逻辑回归(regularization logistics regression)
  • 代码实现
  • 运行结果

感知器的种类

  • 离散感知器:输出的预测值仅为 0 或 1
  • 连续感知器(逻辑分类器):输出的预测值可以是 0 到 1 的任何数字,标签为 0 的点输出接近于 0 的数,标签为 1 的点输出接近于 1 的数
  • 逻辑回归算法(logistics regression algorithm):用于训练逻辑分类器的算法

sigmoid(logistics)函数

  • sigmoid 函数:

g ( z ) = 1 1 + e − z ,   z ∈ ( − ∞ , + ∞ ) ,   0 < g ( z ) < 1 w h e n   z ∈ ( − ∞ , 0 ) ,   0 < g ( z ) < 0.5 w h e n   z ∈ [ 0 , + ∞ ) ,   0.5 ≤ g ( z ) < 1 \begin{aligned} & g(z) = \frac{1}{1 + e^{-z}},\ z \in (-\infty, +\infty),\ 0 < g(z) < 1 \\ & when \ z \in (-\infty, 0), \ 0 < g(z) < 0.5 \\ & when \ z \in [0, +\infty), \ 0.5 \leq g(z) < 1 \end{aligned} g(z)=1+ez1, z(,+), 0<g(z)<1when z(,0), 0<g(z)<0.5when z[0,+), 0.5g(z)<1

  • 决策边界(decision boundary):

线性决策边界: z = w ⃗ ⋅ x ⃗ + b 非线性决策边界(例如): z = x 1 2 + x 2 2 − 1 线性决策边界:z = \vec{w} \cdot \vec{x} + b \\ 非线性决策边界(例如):z = x_1^2 + x_2^2 - 1 线性决策边界:z=w x +b非线性决策边界(例如):z=x12+x221

  • sigmoid 函数与线性决策边界函数的结合:

g ( z ) = 1 1 + e − z f w ⃗ , b ( x ⃗ ) = 1 1 + e − ( w ⃗ ⋅ x ⃗ + b ) \begin{aligned} & g(z) = \frac{1}{1 + e^{-z}} \\ & f_{\vec{w}, b}(\vec{x}) = \frac{1}{1 + e^{-(\vec{w} \cdot \vec{x} + b)}} \end{aligned} g(z)=1+ez1fw ,b(x )=1+e(w x +b)1

  • 决策原理( y ^ \hat{y} y^ 为预测值):

概率: { a 1 = f w ⃗ , b ( x ⃗ ) = P ( y ^ = 1 ∣ x ⃗ ) a 2 = 1 − a 1 = P ( y ^ = 0 ∣ x ⃗ ) 概率: \begin{cases} a_1 = f_{\vec{w}, b}(\vec{x}) &= P(\hat{y} = 1 | \vec{x}) \\ a_2 = 1 - a_1 &= P(\hat{y} = 0 | \vec{x}) \end{cases} 概率:{a1=fw ,b(x )a2=1a1=P(y^=1∣x )=P(y^=0∣x )

代价/损失函数(cost function)——对数损失函数(log loss function)

  • 一个训练样本: x ⃗ ( i ) = ( x 1 ( i ) , x 2 ( i ) , . . . , x n ( i ) ) \vec{x}^{(i)} = (x_1^{(i)}, x_2^{(i)}, ..., x_n^{(i)}) x (i)=(x1(i),x2(i),...,xn(i)) y ( i ) y^{(i)} y(i)
  • 训练样本总数 = m m m
  • 对数损失函数(log loss function):

L ( f w ⃗ , b ( x ⃗ ( i ) ) , y ( i ) ) = { − ln ⁡ [ f w ⃗ , b ( x ⃗ ( i ) ) ] ,   y ( i ) = 1 − ln ⁡ [ 1 − f w ⃗ , b ( x ⃗ ( i ) ) ] ,   y ( i ) = 0 = − y ( i ) ln ⁡ [ f w ⃗ , b ( x ⃗ ( i ) ) ] − [ 1 − y ( i ) ] ln ⁡ [ 1 − f w ⃗ , b ( x ⃗ ( i ) ) ] = − y ( i ) ln ⁡ a 1 ( i ) − [ 1 − y ( i ) ] ln ⁡ a 2 ( i ) \begin{aligned} L(f_{\vec{w}, b}(\vec{x}^{(i)}), y^{(i)}) &= \begin{cases} -\ln [f_{\vec{w}, b}(\vec{x}^{(i)})], \ y^{(i)} = 1 \\ -\ln [1 - f_{\vec{w}, b}(\vec{x}^{(i)})], \ y^{(i)} = 0 \\ \end{cases} \\ & = -y^{(i)} \ln [f_{\vec{w}, b}(\vec{x}^{(i)})] - [1 - y^{(i)}] \ln [1 - f_{\vec{w}, b}(\vec{x}^{(i)})] \\ & = -y^{(i)} \ln a_1^{(i)} - [1 - y^{(i)}] \ln a_2^{(i)} \end{aligned} L(fw ,b(x (i)),y(i))={ln[fw ,b(x (i))], y(i)=1ln[1fw ,b(x (i))], y(i)=0=y(i)ln[fw ,b(x (i))][1y(i)]ln[1fw ,b(x (i))]=y(i)lna1(i)[1y(i)]lna2(i)

  • 代价函数(cost function):

J ( w ⃗ , b ) = 1 m ∑ i = 1 m L ( f w ⃗ , b ( x ⃗ ( i ) ) , y ( i ) ) = − 1 m ∑ i = 1 m ( y ( i ) ln ⁡ [ f w ⃗ , b ( x ⃗ ( i ) ) ] + [ 1 − y ( i ) ] ln ⁡ [ 1 − f w ⃗ , b ( x ⃗ ( i ) ) ] ) = − 1 m ∑ i = 1 m ( y ( i ) ln ⁡ a 1 ( i ) + [ 1 − y ( i ) ] ln ⁡ a 2 ( i ) ) \begin{aligned} J(\vec{w}, b) &= \frac{1}{m} \sum_{i=1}^{m} L(f_{\vec{w}, b}(\vec{x}^{(i)}), y^{(i)}) \\ &= -\frac{1}{m} \sum_{i=1}^{m} \bigg(y^{(i)} \ln [f_{\vec{w}, b}(\vec{x}^{(i)})] + [1 - y^{(i)}] \ln [1 - f_{\vec{w}, b}(\vec{x}^{(i)})] \bigg) \\ &= -\frac{1}{m} \sum_{i=1}^{m} \bigg(y^{(i)} \ln a_1^{(i)} + [1 - y^{(i)}] \ln a_2^{(i)} \bigg) \end{aligned} J(w ,b)=m1i=1mL(fw ,b(x (i)),y(i))=m1i=1m(y(i)ln[fw ,b(x (i))]+[1y(i)]ln[1fw ,b(x (i))])=m1i=1m(y(i)lna1(i)+[1y(i)]lna2(i))

梯度下降算法(gradient descent algorithm)

  • α \alpha α:学习率(learning rate),用于控制梯度下降时的步长,以抵达损失函数的最小值处。
  • 逻辑回归的梯度下降算法:
    r e p e a t { t m p _ w 1 = w 1 − α 1 m ∑ i = 1 m [ f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ] x 1 ( i ) t m p _ w 2 = w 2 − α 1 m ∑ i = 1 m [ f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ] x 2 ( i ) . . . t m p _ w n = w n − α 1 m ∑ i = 1 m [ f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ] x n ( i ) t m p _ b = b − α 1 m ∑ i = 1 m [ f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ] s i m u l t a n e o u s   u p d a t e   e v e r y   p a r a m e t e r s } u n t i l   c o n v e r g e \begin{aligned} repeat \{ \\ & tmp\_w_1 = w_1 - \alpha \frac{1}{m} \sum^{m}_{i=1} [f_{\vec{w},b}(\vec{x}^{(i)}) - y^{(i)}] x_1^{(i)} \\ & tmp\_w_2 = w_2 - \alpha \frac{1}{m} \sum^{m}_{i=1} [f_{\vec{w},b}(\vec{x}^{(i)}) - y^{(i)}] x_2^{(i)} \\ & ... \\ & tmp\_w_n = w_n - \alpha \frac{1}{m} \sum^{m}_{i=1} [f_{\vec{w},b}(\vec{x}^{(i)}) - y^{(i)}] x_n^{(i)} \\ & tmp\_b = b - \alpha \frac{1}{m} \sum^{m}_{i=1} [f_{\vec{w},b}(\vec{x}^{(i)}) - y^{(i)}] \\ & simultaneous \ update \ every \ parameters \\ \} until \ & converge \end{aligned} repeat{}until tmp_w1=w1αm1i=1m[fw ,b(x (i))y(i)]x1(i)tmp_w2=w2αm1i=1m[fw ,b(x (i))y(i)]x2(i)...tmp_wn=wnαm1i=1m[fw ,b(x (i))y(i)]xn(i)tmp_b=bαm1i=1m[fw ,b(x (i))y(i)]simultaneous update every parametersconverge

正则化逻辑回归(regularization logistics regression)

  • 正则化的作用:解决过拟合(overfitting)问题(也可通过增加训练样本数据解决)。
  • 损失/代价函数(仅需正则化 w w w,无需正则化 b b b):

J ( w ⃗ , b ) = − 1 m ∑ i = 1 m ( y ( i ) ln ⁡ [ f w ⃗ , b ( x ⃗ ( i ) ) ] + [ 1 − y ( i ) ] ln ⁡ [ 1 − f w ⃗ , b ( x ⃗ ( i ) ) ] ) + λ 2 m ∑ j = 1 n w j 2 \begin{aligned} J(\vec{w}, b) &= -\frac{1}{m} \sum_{i=1}^{m} \bigg(y^{(i)} \ln [f_{\vec{w}, b}(\vec{x}^{(i)})] + [1 - y^{(i)}] \ln [1 - f_{\vec{w}, b}(\vec{x}^{(i)})] \bigg) + \frac{\lambda}{2m} \sum^{n}_{j=1} w_j^2 \end{aligned} J(w ,b)=m1i=1m(y(i)ln[fw ,b(x (i))]+[1y(i)]ln[1fw ,b(x (i))])+2mλj=1nwj2

其中,第二项为正则化项(regularization term),使 w j w_j wj 变小。初始设置的 λ \lambda λ 越大,最终得到的 w j w_j wj 越小。

  • 梯度下降算法:

r e p e a t { t m p _ w 1 = w 1 − α 1 m ∑ i = 1 m [ f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ] x 1 ( i ) + λ m w 1 t m p _ w 2 = w 2 − α 1 m ∑ i = 1 m [ f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ] x 2 ( i ) + λ m w 2 . . . t m p _ w n = w n − α 1 m ∑ i = 1 m [ f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ] x n ( i ) + λ m w n t m p _ b = b − α 1 m ∑ i = 1 m [ f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ] s i m u l t a n e o u s   u p d a t e   e v e r y   p a r a m e t e r s } u n t i l   c o n v e r g e \begin{aligned} repeat \{ \\ & tmp\_w_1 = w_1 - \alpha \frac{1}{m} \sum^{m}_{i=1} [f_{\vec{w},b}(\vec{x}^{(i)}) - y^{(i)}] x_1^{(i)} + \frac{\lambda}{m} w_1 \\ & tmp\_w_2 = w_2 - \alpha \frac{1}{m} \sum^{m}_{i=1} [f_{\vec{w},b}(\vec{x}^{(i)}) - y^{(i)}] x_2^{(i)} + \frac{\lambda}{m} w_2 \\ & ... \\ & tmp\_w_n = w_n - \alpha \frac{1}{m} \sum^{m}_{i=1} [f_{\vec{w},b}(\vec{x}^{(i)}) - y^{(i)}] x_n^{(i)} + \frac{\lambda}{m} w_n \\ & tmp\_b = b - \alpha \frac{1}{m} \sum^{m}_{i=1} [f_{\vec{w},b}(\vec{x}^{(i)}) - y^{(i)}] \\ & simultaneous \ update \ every \ parameters \\ \} until \ & converge \end{aligned} repeat{}until tmp_w1=w1αm1i=1m[fw ,b(x (i))y(i)]x1(i)+mλw1tmp_w2=w2αm1i=1m[fw ,b(x (i))y(i)]x2(i)+mλw2...tmp_wn=wnαm1i=1m[fw ,b(x (i))y(i)]xn(i)+mλwntmp_b=bαm1i=1m[fw ,b(x (i))y(i)]simultaneous update every parametersconverge

代码实现

import numpy as np
import matplotlib.pyplot as plt

# sigmoid 函数 f = 1/(1+e^(-x))
def sigmoid(x):
    return np.exp(x) / (1 + np.exp(x))

# 计算分数 z = w*x+b
def score(x, w, b):
    return np.dot(w, x) + b

# 预测值 f_pred = sigmoid(z)
def prediction(x, w, b):
    return sigmoid(score(x, w, b))

# 对数损失函数 f = -y*ln(a)-(1-y)*ln(1-a)
# 训练样本: (vec{X[i]}, y[i])
def log_loss(X_i, y_i, w, b):
    pred = prediction(X_i, w, b)
    return - y_i * np.log(pred) - (1-y_i) * np.log(1-pred)

# 计算损失函数 J(w, b)
# 训练样本: (vec{X[i]}, y[i])
def cost_function(X, y, w, b):
    cost_sum = 0
    m = X.shape[0]
    for i in range(m):
        cost_sum += log_loss(X[i], y[i], w, b)
    return cost_sum / m

# 计算梯度值 dJ/dw, dJ/db
def compute_gradient(X, y, w, b):
    m = X.shape[0]  # 训练集的数据样本数(矩阵行数)
    n = X.shape[1]  # 每个数据样本的维度(矩阵列数,即特征个数)
    dj_dw = np.zeros((n,))
    dj_db = 0.0
    for i in range(m):  # 每个数据样本
        pred = prediction(X[i], w, b)
        for j in range(n):  # 每个数据样本的维度
            dj_dw[j] += (pred - y[i]) * X[i, j]
        dj_db += (pred - y[i])
    dj_dw = dj_dw / m
    dj_db = dj_db / m
    return dj_dw, dj_db

# 梯度下降算法,以得到决策边界(decision boundary)方程
def logistic_function(X, y, w, b, learning_rate=0.01, epochs=1000):
    J_history = []
    for epoch in range(epochs):
        dj_dw, dj_db = compute_gradient(X, y, w, b)
        # w 和 b 需同步更新
        w = w - learning_rate * dj_dw
        b = b - learning_rate * dj_db
        J_history.append(cost_function(X, y, w, b))  # 记录每次迭代产生的误差值
    return w, b, J_history

# 绘制线性方程的图像
def draw_line(w, b, xmin, xmax, title):
    x = np.linspace(xmin, xmax)
    y = w * x + b
    plt.xlabel("feature-0", size=15)
    plt.ylabel("feature-1", size=15)
    plt.title(title, size=20)
    plt.plot(x, y)

# 绘制散点图
def draw_scatter(x, y, title):
    plt.xlabel("epoch", size=15)
    plt.ylabel("error", size=15)
    plt.title(title, size=20)
    plt.scatter(x, y)

# 从这里开始执行
if __name__ == '__main__':
    # 加载训练集
    X_train = np.array([[1, 0], [0, 2], [1, 1], [1, 2], [1, 3], [2, 2], [2, 3], [3, 2]])
    y_train = np.array([0, 0, 0, 0, 1, 1, 1, 1])
    w = np.zeros((X_train.shape[1],)) # 权重
    b = 0.0 # 偏置
    learning_rate = 0.01 # 学习率
    epochs = 10000 # 迭代次数
    J_history = [] # 记录每次迭代产生的误差值

    # 逻辑回归建立模型
    w, b, J_history = logistic_function(X_train, y_train, w, b, learning_rate, epochs)
    print(f"result: w = {np.round(w, 4)}, b = {b:0.4f}")  # 打印结果

    # 绘制迭代计算得到的决策边界(decision boundary)方程
    # w[0] * x_feature0 + w[1] * x_feature1 + b = 0
    # --> x_feature1 = -w[0]/w[1] * x_feature0 - b/w[1]
    plt.figure(1)
    draw_line(-w[0]/w[1], -b/w[1], 0.0, 3.0, "Decision Boundary")
    plt.scatter(X_train[0:4, 0], X_train[0:4, 1], label="label-0: sad", marker='s')  # 将训练集也表示在图中
    plt.scatter(X_train[4:8, 0], X_train[4:8, 1], label="label-1: happy", marker='^')  # 将训练集也表示在图中
    plt.legend()
    plt.show()

    # 绘制误差值的散点图
    plt.figure(2)
    x_axis = list(range(0, epochs))
    draw_scatter(x_axis, J_history, "Cost Function in Every Epoch")
    plt.show()

运行结果

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

web 发展阶段 -- 详解

1. web 发展阶段 当前处于 移动 web 应用阶段。也是个风口&#xff08;当然是针对有能力创业的人来说的&#xff09;&#xff0c;如 抖音、快手就是这个时代的产物。 2. web 发展阶段引出前后端分离的过程 2.1 传统开发方式 2.2 前后端分离模式 衍生自移动 web 应用阶段。 3.…

第9讲重写登录成功和登录失败处理器

重写登录成功和登录失败处理器 common下新建security包&#xff0c;再新建两个类&#xff0c;LoginSuccessHandler和LoginFailureHandler Component public class LoginSuccessHandler implements AuthenticationSuccessHandler {Overridepublic void onAuthenticationSuccess…

论文阅读:四足机器人对抗运动先验学习稳健和敏捷的行走

论文&#xff1a;Learning Robust and Agile Legged Locomotion Using Adversarial Motion Priors 进一步学习&#xff1a;AMP&#xff0c;baseline方法&#xff0c;TO 摘要&#xff1a; 介绍了一种新颖的系统&#xff0c;通过使用对抗性运动先验 (AMP) 使四足机器人在复杂地…

实战 | 使用CNN和OpenCV实现数字识别项目(步骤 + 源码)

导 读 本文主要介绍使用CNN和OpenCV实现数字识别项目,含详细步骤和源码。 前 言 在当今世界,深度学习和图像处理技术正在各个应用领域得到利用。在这篇博文中,我们将使用卷积神经网络 (CNN) 和 OpenCV 库完成数字识别项目。我们将逐步掌握该项目如何执行。 项目准…

Java实战:构建智能工作量统计系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

设计模式Python实现

过年在家瞎折腾&#xff0c;闲着无聊看到设计模式&#xff0c;于是就想着用Python实现一下。 简单工厂 根据传入的参数决定创建出哪一种产品类的实例。 class CashFactory:def createCashAdapter(self, type):if type "满100减20":return CashReturn(100, 20)elif…

生成式 AI - Diffusion 模型 (DDPM)原理解析(1)

来自 论文《 Denoising Diffusion Probabilistic Model》&#xff08;DDPM&#xff09; 论文链接&#xff1a;https://arxiv.org/abs/2006.11239 Hung-yi Lee 课件整理 简单地介绍diffusion model 的基本概念&#xff0c;diffusion model有很多不同的变形&#xff0c;现在比较…

适用于电脑和手机的照片恢复工具指南

这是适用于 Android、iPhone、Mac 和 Windows 的最佳照片恢复应用程序的指南。 如果您不小心删除了一堆珍贵的照片&#xff0c;请不要担心&#xff01; 恢复丢失的照片和数据实际上比您想象的要容易得多。 通过使用照片恢复应用程序&#xff0c;您可以“解锁”存储卡或硬盘驱…

Java学习第十六节之类与对象的创建和构造器详解

类与对象的创建 构造器 package oop;import com.sun.org.apache.xalan.internal.xsltc.compiler.util.MatchGenerator;//Java---->class public class Person {//一个类即使什么都不写&#xff0c;它也会存在一个方法//显示的定义构造器String name;int age;//altinsert构造…

Code Composer Studio (CCS) - 文件比较

Code Composer Studio [CCS] - 文件比较 References 鼠标单击选中一个文件&#xff0c;再同时按住 Ctrl 鼠标左键来选中第二个文件&#xff0c;在其中一个文件上鼠标右击选择 Compare With -> Each Other. References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.n…

Slider滑动输入条(antd-design组件库)简单使用

1.Slider滑动输入条 滑动型输入器&#xff0c;展示当前值和可选范围。 2.何时使用 当用户需要在数值区间/自定义区间内进行选择时&#xff0c;可为连续或离散值。 组件代码来自&#xff1a; 滑动输入条 Slider - Ant Design 3.本地验证前的准备 参考文章【react项目antd组件-de…

一、ActiveMQ介绍

ActiveMQ介绍 一、JMS1.jms介绍2.jms消息传递模式3.JMS编码总体架构 二、消息中间件三、ActiveMQ介绍1.引入的原因1.1 原因1.2 遇到的问题1.3 解决思路 2.定义3.特点3.1 异步处理3.2 应用系统之间解耦3.3 实际-整体架构 4.作用 一、JMS 1.jms介绍 jms是java消息服务接口规范&…

QPaint绘制自定义坐标轴组件00

最终效果 1.创建一个ui页面&#xff0c;修改背景颜色 鼠标右键->改变样式表->添加颜色->background-color->选择合适的颜色->ok->Apply->ok 重新运行就可以看到widget的背景颜色已经改好 2.创建一个自定义的widget窗口小部件类&#xff0c;class MyChart…

第五节笔记:LMDeploy 大模型量化部署实践

大模型部署背景 参数用FP16半精度也就是2字节&#xff0c;7B的模型就大约占14G 2.LMDeploy简介 量化降低显存需求量&#xff0c;提高推理速度 大语言模型推理是典型的访问密集型&#xff0c;因为是decoder only的架构&#xff0c;需要token by token的生成&#xff0c;因…

【2024】如何订阅Netflix奈飞?Netflix奈飞购买教程

【2024】如何订阅Netflix奈飞&#xff1f;Netflix奈飞购买教程 Netflix奈飞作为全球领先的在线流媒体平台之一&#xff0c;拥有丰富的影视资源和独家内容&#xff0c;成为了人们追剧的热门选择。本文将为您介绍如何订阅Netflix奈飞&#xff0c;并提供详细的购买教程&#xff0…

String讲解

文章目录 String类的重要性常用的方法常用的构造方法String类的比较字符串的查找转化数字转化为字符串字符串转数字 字符串替换字符串的不可变性 字符串拆分字符串截取字符串修改 StringBuilder和StringBuffer String类的重要性 在c/c的学习中我们接触到了字符串&#xff0c;但…

C++模板详解 —— 函数模板与类模板

C模板详解 泛型编程函数模板函数模板的概念函数模板的原理 函数模板的实例化函数模板的匹配原则类模板类模板的定义格式类模板的实例化 泛型编程 如果让你编写一个函数&#xff0c;用于两个数的交换。在C语言中&#xff0c;我们会用如下方法&#xff1a; void Swapi(int* p1,…

关于DVWA靶场Could not connect to the database service的几种解决办法

总的来说这个问题都是 config 配置文件没有修改正确 一般修改数据库的用户名和密码与 phpstudy 一致并且添加了 key 就能初始化成功的 但是我还遇到过另一种情况&#xff0c;修改了上面的东西依旧无法连接到数据库 Could not connect to the database service. Please check …

大数据01-导论

零、文章目录 大数据01-导论 1、数据与数据分析 **数据&#xff1a;是事实或观察的结果&#xff0c;是对客观事物的逻辑归纳&#xff0c;是用于表示客观事物的未经加工的原始素材。**数据可以是连续的值&#xff0c;比如声音、图像&#xff0c;称为模拟数据&#xff1b;也可…

PWM驱动直流电机

一、知识补充; 低频时有蜂鸣器响声&#xff0c;加大PWM频率&#xff0c;超出人耳范围就可以听不到&#xff0c;20Hz~20kHz 加大频率-->减小预分频器&#xff0c;从720-->36现在频率就是20kHz这样不会影响占空比&#xff1f; 二、接线图 三、代码分析 main,c #include…