- 机器学习基础
- ML - 首页
- ML - 简介
- ML - 入门
- ML - 基本概念
- ML - 生态系统
- ML - Python 库
- ML - 应用
- ML - 生命周期
- ML - 必备技能
- ML - 实现
- ML - 挑战与常见问题
- ML - 限制
- ML - 真实案例
- ML - 数据结构
- ML - 数学
- ML - 人工智能
- ML - 神经网络
- ML - 深度学习
- ML - 获取数据集
- ML - 分类数据
- ML - 数据加载
- ML - 数据理解
- ML - 数据准备
- ML - 模型
- ML - 监督学习
- ML - 无监督学习
- ML - 半监督学习
- ML - 强化学习
- ML - 监督学习与无监督学习
- 机器学习数据可视化
- ML - 数据可视化
- ML - 直方图
- ML - 密度图
- ML - 箱线图
- ML - 相关矩阵图
- ML - 散点矩阵图
- 机器学习统计学
- ML - 统计学
- ML - 均值、中位数、众数
- ML - 标准差
- ML - 百分位数
- ML - 数据分布
- ML - 偏度和峰度
- ML - 偏差和方差
- ML - 假设
- 机器学习中的回归分析
- ML - 回归分析
- ML - 线性回归
- ML - 简单线性回归
- ML - 多元线性回归
- ML - 多项式回归
- 机器学习中的分类算法
- ML - 分类算法
- ML - 逻辑回归
- ML - K近邻算法 (KNN)
- ML - 朴素贝叶斯算法
- ML - 决策树算法
- ML - 支持向量机
- ML - 随机森林
- ML - 混淆矩阵
- ML - 随机梯度下降
- 机器学习中的聚类算法
- ML - 聚类算法
- ML - 基于质心的聚类
- ML - K均值聚类
- ML - K中心点聚类
- ML - 均值漂移聚类
- ML - 层次聚类
- ML - 基于密度的聚类
- ML - DBSCAN聚类
- ML - OPTICS聚类
- ML - HDBSCAN聚类
- ML - BIRCH聚类
- ML - 亲和传播
- ML - 基于分布的聚类
- ML - 凝聚层次聚类
- 机器学习中的降维
- ML - 降维
- ML - 特征选择
- ML - 特征提取
- ML - 向后剔除法
- ML - 前向特征构造
- ML - 高相关性过滤器
- ML - 低方差过滤器
- ML - 缺失值比率
- ML - 主成分分析
- 强化学习
- ML - 强化学习算法
- ML - 利用与探索
- ML - Q学习
- ML - REINFORCE算法
- ML - SARSA强化学习
- ML - 演员-评论家方法
- 深度强化学习
- ML - 深度强化学习
- 量子机器学习
- ML - 量子机器学习
- ML - 使用Python的量子机器学习
- 机器学习杂项
- ML - 性能指标
- ML - 自动工作流
- ML - 提升模型性能
- ML - 梯度提升
- ML - 自举汇聚 (Bagging)
- ML - 交叉验证
- ML - AUC-ROC曲线
- ML - 网格搜索
- ML - 数据缩放
- ML - 训练和测试
- ML - 关联规则
- ML - Apriori算法
- ML - 高斯判别分析
- ML - 成本函数
- ML - 贝叶斯定理
- ML - 精确率和召回率
- ML - 对抗性
- ML - 堆叠
- ML - 轮次
- ML - 感知机
- ML - 正则化
- ML - 过拟合
- ML - P值
- ML - 熵
- ML - MLOps
- ML - 数据泄露
- ML - 机器学习的货币化
- ML - 数据类型
- 机器学习 - 资源
- ML - 快速指南
- ML - 速查表
- ML - 面试问题
- ML - 有用资源
- ML - 讨论
机器学习 - 感知机
感知机是最古老和最简单的神经网络架构之一。它由弗兰克·罗森布拉特于 20 世纪 50 年代发明。感知机算法是一种线性分类器,可将输入分类为两个可能的输出类别之一。它是一种监督学习类型,通过提供标记的训练数据来训练模型。感知机算法基于阈值函数,该函数取输入的加权和并应用阈值以生成二进制输出。
感知机的架构
单层感知机由输入层、权重层和输出层组成。输入层中的每个节点都连接到权重层中的每个节点,每个连接都分配了一个权重。权重层中的每个节点计算输入的加权和,并应用阈值函数来生成输出。
感知机中的阈值函数是海维赛德阶跃函数,如果输入大于或等于零,则返回二进制值 1,否则返回 0。权重层中每个节点的输出由以下公式确定:
$$y=\left\{\begin{matrix} 1; & if\: w_{0}+w_{1}x_{1}+w_{2}x_{2}+\cdot \cdot \cdot +w_{n}x_{n}\: > = 0 \\ 0; & otherwise \\ \end{matrix}\right.$$
其中“y”是输出,x1、x2、...、xn是输入特征;w0、w1、w2、...、wn是相应的权重,>= 0 表示海维赛德阶跃函数。
感知机的训练
感知机算法的训练过程涉及迭代更新权重,直到模型收敛到一组权重,这些权重可以正确地对所有训练示例进行分类。最初,权重设置为随机值。对于每个训练示例,将预测输出与实际输出进行比较,并相应地更新权重以最小化误差。
感知机中的权重更新规则如下:
$$w_{i}=w_{i}+\alpha \times \left ( y-y' \right )\times x_{i}$$
其中Wi是第i个特征的权重,$\alpha$是学习率,y是实际输出,y′是预测输出,xi是第i个输入特征。
使用Python实现感知机
使用scikit-learn库在Python中实现了感知机算法。scikit-learn库提供了一个Perceptron类,可用于二元分类问题。
以下是在Python中使用scikit-learn实现感知机算法的示例:
示例
from sklearn.linear_model import Perceptron from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # Load the iris dataset iris = load_iris() # Split the dataset into training and testing sets X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=0) # Create a Perceptron object with a learning rate of 0.1 perceptron = Perceptron(alpha=0.1) # Train the Perceptron on the training data perceptron.fit(X_train, y_train) # Use the trained Perceptron to make predictions on the testing data y_pred = perceptron.predict(X_test) # Evaluate the accuracy of the Perceptron accuracy = accuracy_score(y_test, y_pred) print("Accuracy:", accuracy)
输出
执行此代码时,将生成以下输出:
Accuracy: 0.8
训练感知机后,可将其用于对新输入数据进行预测。给定一组输入值,感知机计算输入的加权和,并将激活函数应用于该和以获得输出值。然后可以将此输出值解释为对应输入的预测。
阶跃函数在感知机训练中的作用
感知机中使用的激活函数可能会有所不同,但常见的选择是阶跃函数。如果输入为正,则阶跃函数返回 1;如果输入为负或零,则返回 0。此函数很有用,因为它提供二进制输出,可以将其解释为二元分类问题的预测。
以下是在Python中使用阶跃函数作为激活函数实现感知机的示例:
import numpy as np class Perceptron: def __init__(self, learning_rate=0.1, epochs=100): self.learning_rate = learning_rate self.epochs = epochs self.weights = None self.bias = None def step_function(self, x): return np.where(x >= 0, 1, 0) def fit(self, X, y): n_samples, n_features = X.shape # initialize weights and bias to 0 self.weights = np.zeros(n_features) self.bias = 0 # iterate over epochs and update weights and bias for _ in range(self.epochs): for i in range(n_samples): linear_output = np.dot(self.weights, X[i]) + self.bias y_pred = self.step_function(linear_output) # update weights and bias based on error update = self.learning_rate * (y[i] - y_pred) self.weights += update * X[i] self.bias += update def predict(self, X): linear_output = np.dot(X, self.weights) + self.bias y_pred = self.step_function(linear_output) return y_pred
在此实现中,Perceptron类采用两个参数:learning_rate和epochs。fit方法使用输入数据X和相应的目标值y训练感知机。predict方法采用输入数据数组并返回预测的输出值。
要使用此实现,我们可以创建一个Perceptron类的实例并调用fit方法来训练模型:
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) y = np.array([0, 0, 0, 1]) perceptron = Perceptron(learning_rate=0.1, epochs=10) perceptron.fit(X, y)
训练模型后,我们可以使用predict方法对新输入数据进行预测:
test_data = np.array([[1, 1], [0, 1]]) predictions = perceptron.predict(test_data) print(predictions)
此代码的输出为[1, 0],它们是输入数据[[1, 1], [0, 1]]的预测值。