【Python】sklearn教程

news2024/9/22 17:38:00

1. sklearn库介绍

sklearn是 Python 中一个非常重要的机器学习库,全称为scikit-learn。它是基于Python语言的机器学习工具,提供了一系列简单高效的机器学习算法。sklearn库通常与NumPySciPy库一起使用,用于数据预处理、特征选择、模型训练、模型评估等机器学习的各个方面。sklearn 的设计理念是“API的一致性”、“可检验性”和“通用性”,这使得它非常易于使用和扩展。

要学习 sklearn 库的话,我们可以从以下几个方面入手:

  1. 核心功能:sklearn 提供了哪些主要的机器学习算法和工具。
  2. 设计原则:sklearn 的设计理念,如何使得它在机器学习领域如此受欢迎。
  3. 使用流程:如何使用 sklearn 进行机器学习项目的一般步骤。
  4. 社区和支持:sklearn 的社区活跃度以及学习资源。
    为了更直观地展示这些信息,我将用使用思维导图的形式来组织这些内容。这将有助于清晰地展示sklearn库的各个方面,并使其更易于理解。
    现在,我将创建一个思维导图来详细展示sklearn库的这些方面。
    以下是关于sklearn库的思维导图,它详细介绍了库的核心功能、设计原则、使用流程以及社区和支持情况:
    sklearn库简介
  • 这个思维导图应该可以帮助我们更好地理解 sklearn 库的各个方面。

2. sklearn使用步骤

1. 安装

首先,确保你已经安装了scikit-learn。如果没有,可以使用以下命令进行安装:

pip install -U scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple

2. 导入库

在Python代码中,首先导入所需的模块:

import sklearn

3. 数据准备

在使用sklearn之前,通常需要准备数据。数据通常分为特征矩阵X和目标向量y

from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target

4. 数据分割

通常将数据分为训练集和测试集。

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

5. 模型选择

选择一个学习算法并实例化它。

from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier(n_neighbors=3)

6. 训练模型

用训练集数据训练模型。

model.fit(X_train, y_train)

7. 模型预测

用训练好的模型进行预测。

y_pred = model.predict(X_test)

8. 评估模型

评估模型的效果。

from sklearn.metrics import accuracy_score
print(f"Model accuracy: {accuracy_score(y_test, y_pred)}")

9. 模型持久化

保存模型或加载模型。

import joblib
# 保存模型
joblib.dump(model, 'model.pkl')
# 加载模型
loaded_model = joblib.load('model.pkl')

10. 参数调优

使用交叉验证等方法进行参数调优。

from sklearn.model_selection import GridSearchCV
param_grid = {'n_neighbors': [1, 3, 5, 7, 9]}
grid_search = GridSearchCV(model, param_grid, cv=5)
grid_search.fit(X_train, y_train)
print(f"Best parameters: {grid_search.best_params_}")

以上只是sklearn库的基础使用流程。该库非常强大,支持多种机器学习算法和工具,是进行机器学习和数据科学研究的常用工具之一。

3. sklearn库常用方法及优势

以下是sklearn库中常用的方法及其优势:

3.1 数据预处理

3.1.1 preprocessing.StandardScaler: 标准化特征,使其具有零均值和单位方差。
from sklearn.preprocessing import StandardScaler
import numpy as np

# 创建一个具有两个特征的样本数据集
X = np.array([[1, -1], [2, 0], [0, 1], [1, 1], [2, -1]])

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 注意事项:
# - 在训练集上拟合标准化器,并使用相同的参数转换测试集。
# - 不要在测试集上调用 fit_transform(),应该只使用 transform()。
3.1.2 preprocessing.MinMaxScaler: 将特征缩放到一个给定的范围。
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)

# 注意事项:
# - 与 StandardScaler 类似,不要在测试集上调用 fit_transform()。
# - MinMaxScaler 会将特征缩放到 [0, 1] 范围内,对于某些算法可能不适用。
3.1.3 preprocessing.OneHotEncoder: 将分类特征转换为独热编码。

以下是一个使用OneHotEncoder的简要示例程序:

from sklearn.preprocessing import OneHotEncoder
import numpy as np
# 示例数据:具有两个分类特征的二维数组
data = np.array([[0, 0], [1, 1], [2, 0], [0, 2]])
# 创建OneHotEncoder实例
encoder = OneHotEncoder(sparse=False)
# 训练并转换数据
encoded_data = encoder.fit_transform(data)
# 打印转换后的数据
print(encoded_data)
# 打印特征名称
print(encoder.get_feature_names_out())

在这个示例中,我们首先创建了一个包含两个分类特征的二维数组。然后,我们实例化了一个OneHotEncoder对象,并将其设置为不返回稀疏矩阵(sparse=False)。接下来,我们使用fit_transform方法来训练编码器并转换数据。最后,我们打印了转换后的独热编码数据以及每个独热编码特征对应的名称。输出将类似于以下内容:

[[1. 0. 0. 1.]
 [0. 1. 1. 0.]
 [0. 0. 1. 0.]
 [1. 0. 0. 0.]]
['x0_0', 'x0_1', 'x0_2', 'x1_0']

这里的x0_0x0_1x0_2分别代表第一个特征的三个不同类别(0、1、2)的独热编码,而x1_0代表第二个特征中类别0的独热编码。由于第二个特征只有两个类别(0和1),所以只生成了一个独热编码列。

3.1.4 preprocessing.LabelEncoder: 将分类标签转换为整数编码。

以下是一个使用LabelEncoder的简要示例程序:

from sklearn.preprocessing import LabelEncoder
import numpy as np
# 示例数据:一个包含分类标签的数组
labels = np.array(['cat', 'dog', 'cat', 'dog', 'bird'])
# 创建LabelEncoder实例
label_encoder = LabelEncoder()
# 训练并转换数据
encoded_labels = label_encoder.fit_transform(labels)
# 打印转换后的数据
print(encoded_labels)
# 打印原始和转换后的标签
print(label_encoder.classes_)
print(label_encoder.transform(['bird', 'cat']))

在这个示例中,我们首先创建了一个包含分类标签的数组。然后,我们实例化了一个LabelEncoder对象。接下来,我们使用fit_transform方法来训练编码器并转换数据。最后,我们打印了转换后的整数编码标签,以及原始和转换后的标签。输出将类似于以下内容:

[0 1 0 1 2]
['bird' 'cat' 'dog']
[1 0]

这里的012分别代表标签'bird''cat''dog'的整数编码。label_encoder.classes_返回了原始标签的列表,而label_encoder.transform(['bird', 'cat'])则返回了这些标签的整数编码。

优势:这些方法使得不同规模和类型的特征可以被统一处理,这对于许多机器学习算法来说是必要的。

3.2 特征选择

3.2.1 feature_selection.SelectKBest: 选择K个最佳特征。
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2

iris = load_iris()
X, y = iris.data, iris.target

# 选择两个最佳特征
selector = SelectKBest(score_func=chi2, k=2)
X_k_best = selector.fit_transform(X, y)

# 注意事项:
# - 选择特征的方法应该与数据类型和任务类型相匹配。
# - chi2 适用于分类任务的非负特征。
3.2.2 feature_selection.RFE: 递归特征消除,通过递归减少特征集的大小。
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

# 使用逻辑回归模型和RFE选择特征
selector = RFE(estimator=LogisticRegression(), n_features_to_select=2)
X_rfe = selector.fit_transform(X, y)

# 注意事项:
# - RFE 需要一个基础估计器,通常是监督学习模型。
# - 选择的特征数量应该小于等于原始特征的数量。

优势:能够帮助识别和选择对模型预测能力贡献最大的特征,从而简化模型并提高效率。

3.3 数据集划分

3.3.1 model_selection.train_test_split: 将数据集划分为训练集和测试集。
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 注意事项:
# - random_state 参数用于确保可重复性。
# - 保持训练集和测试集的比例一致对于评估模型性能很重要。

优势:简单易用,能够快速进行数据集的划分,为模型训练和评估提供基础。

3.4 模型评估

3.4.1 metrics.accuracy_score: 计算准确率。
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression

# 训练模型
model = LogisticRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)

# 注意事项:
# - 准确率是分类问题中最常用的评估指标,但不总是最佳指标。
# - 在不平衡数据集上,准确率可能会误导。
3.4.2 metrics.precision_score: 计算精确率。
3.4.3 metrics.recall_score: 计算召回率。
3.4.4 metrics.f1_score: 计算F1分数。
3.4.5 metrics.confusion_matrix: 生成混淆矩阵。

优势:提供了多种评估指标,可以全面地了解模型的性能。

3.5 聚类

3.5.1 cluster.KMeans: K均值聚类算法。
from sklearn.cluster import KMeans

# 使用 KMeans 进行聚类
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)

# 注意事项:
# - 需要预先指定聚类的数量(n_clusters)。
# - KMeans 对异常值敏感,可能需要预处理数据。
3.5.2 cluster.AgglomerativeClustering: 层次聚类算法。

优势:支持多种聚类算法,可以用于无监督学习中的数据分组。

3.6 回归

3.6.1 linear_model.LinearRegression: 线性回归。
from sklearn.linear_model import LinearRegression

# 使用线性回归进行拟合
reg = LinearRegression()
reg.fit(X_train, y_train)
y_pred = reg.predict(X_test)

# 注意事项:
# - 线性回归假设特征之间是线性关系。
# - 确保数据没有多重共线性。
3.6.2 ensemble.RandomForestRegressor: 随机森林回归。

优势:提供了多种回归算法,可以用于预测连续值。

3.7 分类

3.7.1 svm.SVC: 支持向量机分类器。
from sklearn.svm import SVC

# 使用支持向量机进行分类
svc = SVC(kernel='linear')
svc.fit(X_train, y_train)
y_pred = svc.predict(X_test)

# 注意事项:
# - 选择合适的核函数(kernel)对模型性能有很大影响。
# - 对于大型数据集,SVC 训练可能会很慢。
3.7.2 neighbors.KNeighborsClassifier: K最近邻分类器。

以下是一个使用KNeighborsClassifier的简要示例程序:

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 加载数据集
iris = datasets.load_iris()
X, y = iris.data, iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 标准化特征
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 创建KNeighborsClassifier实例
knn = KNeighborsClassifier(n_neighbors=3)
# 训练模型
knn.fit(X_train_scaled, y_train)
# 进行预测
y_pred = knn.predict(X_test_scaled)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy of the KNeighborsClassifier: {accuracy:.2f}')

在这个示例中,我们首先加载了鸢尾花(Iris)数据集,然后将其分为训练集和测试集。接着,我们对特征进行了标准化处理,这是K近邻算法中的一个常见步骤,因为它基于距离进行计算。然后,我们创建了一个KNeighborsClassifier实例,指定了邻居的数量为3,并使用训练集来训练模型。最后,我们在测试集上进行了预测,并计算了准确率来评估模型性能。

3.7.3 ensemble.RandomForestClassifier: 随机森林分类器。
3.7.4 naive_bayes.GaussianNB: 高斯朴素贝叶斯分类器。

优势:支持多种分类算法,包括传统算法和集成算法,适用于不同的数据集和问题。

3.8 参数调优

3.8.1 model_selection.GridSearchCV: 网格搜索交叉验证,用于寻找最佳参数。
from sklearn.model_selection import GridSearchCV

# 参数网格
param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']}
grid_search = GridSearchCV(SVC(), param_grid, cv=5)
grid_search.fit(X_train, y_train)

# 注意事项:
# - GridSearchCV 可能非常耗时,尤其是在大型参数空间和大型数据集上。
# - 只对训练集进行网格搜索,以避免过拟合。
3.8.1 model_selection.RandomizedSearchCV: 随机搜索交叉验证,用于在较大的参数空间中寻找最佳参数。
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import expon, randint

# 定义参数的分布
param_distributions = {
    'n_estimators': randint(100, 500),
    'max_depth': [5, 10, None],
    'learning_rate': expon(scale=1.0),
}

# 使用随机搜索交叉验证
random_search = RandomizedSearchCV(RandomForestRegressor(), param_distributions, n_iter=10, cv=5, random_state=42)
random_search.fit(X_train, y_train)

# 注意事项:
# - RandomizedSearchCV 对于大型参数空间更为高效,因为它不是尝试所有可能的组合。
# - `n_iter` 参数控制了随机搜索的迭代次数。
# - 随机搜索的结果可能因随机状态的不同而有所差异。

优势:能够自动化地搜索最佳的模型参数,提高模型性能。

3.9 管道(Pipeline)

3.9.1 pipeline.Pipeline: 构建一个工作流程,将多个预处理步骤和模型训练步骤串联起来。
# 创建带有预处理和模型的管道
pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('svc', SVC())
])

# 定义参数网格
param_grid = {
    'svc__C': [0.1, 1, 10],
    'svc__kernel': ['linear', 'rbf']
}

# 在管道中使用网格搜索交叉验证
grid_search = GridSearchCV(pipeline, param_grid, cv=5)
grid_search.fit(X_train, y_train)

# 注意事项:
# - 参数名称需要包含步骤名称和参数名称,格式为 `step__parameter`。
# - 管道和网格搜索的结合可以同时优化预处理步骤和模型参数。

优势:使得机器学习工作流程更加模块化,易于管理和重复使用。

3.10 集成方法

3.10.1 ensemble.VotingClassifier: 投票分类器,结合多个分类器的预测。
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier, VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据集
iris = datasets.load_iris()
X, y = iris.data, iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建不同的分类器
log_clf = LogisticRegression(max_iter=1000, random_state=42)
rnd_clf = RandomForestClassifier(n_estimators=100, random_state=42)
svm_clf = SVC(gamma='scale', probability=True, random_state=42)

# 创建VotingClassifier对象,这里使用硬投票
voting_clf = VotingClassifier(
    estimators=[('lr', log_clf), ('rf', rnd_clf), ('svc', svm_clf)],
    voting='hard'
)

# 训练VotingClassifier
voting_clf.fit(X_train, y_train)

# 进行预测
y_pred = voting_clf.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy of the VotingClassifier: {accuracy:.2f}')

分类器组合:VotingClassifier 可以结合多个不同的分类器,每个分类器可以是任何具有fitpredict方法的对象。确保每个分类器都适合于当前的问题和数据。
投票类型:可以选择 hardsoft 投票。'hard’ 投票是基于每个分类器的预测结果进行多数投票,而 ’soft’ 投票是基于分类器的预测概率进行加权平均。对于 ’soft’ 投票,分类器必须能够估计概率(即具有 predict_proba 方法)。
权重分配:在 ’soft’ 投票中,可以为每个分类器分配不同的权重,默认情况下,所有分类器的权重都是相等的。
超参数调整:与单个分类器一样,集成分类器也应该进行超参数调整。可以使用GridSearchCVRandomizedSearchCVVotingClassifier一起使用。
性能评估:虽然集成分类器通常能提高性能,但并不是在所有情况下都是如此。应该通过交叉验证和其他性能指标来评估集成分类器的效果。
过拟合风险:集成方法可能会增加过拟合的风险,特别是在使用大量复杂的分类器时。确保对集成分类器进行适当的验证。
计算成本:集成多个分类器会增加计算成本,特别是在训练和预测阶段。在实际应用中,需要平衡性能提升与计算成本。
版本兼容性:VotingClassifier 在不同的 sklearn 版本中可能会有不同的行为,确保使用与你的环境兼容的版本。

3.10.2 ensemble.AdaBoostClassifier: AdaBoost分类器,逐步增强弱学习器。
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier

# 使用决策树作为基础估计器
ada_clf = AdaBoostClassifier(
    DecisionTreeClassifier(max_depth=1),
    n_estimators=200,
    algorithm="SAMME.R",
    learning_rate=0.5
)

ada_clf.fit(X_train, y_train)
y_pred = ada_clf.predict(X_test)

# 注意事项:
# - AdaBoostClassifier 可以通过调整 `learning_rate` 来控制模型过拟合的风险。
# - 基础估计器通常是弱学习器,如决策树,其深度通常较小。

优势:集成方法通常能够提高模型的准确性和鲁棒性。
sklearn库的强大之处在于它的易用性、一致性、广泛的算法覆盖、以及良好的文档支持。它为研究人员和开发人员提供了一个强大的工具集,用于构建复杂的机器学习流程。

3.11 注意事项:

数据类型和格式:确保输入数据的类型和格式符合 sklearn 算法的要求,例如,分类特征通常需要转换为整数或独热编码。
内存管理:对于大型数据集,可能需要考虑内存管理,避免内存溢出。
并行处理:许多 sklearn 算法支持并行处理,可以通过设置 n_jobs 参数来加速计算。
版本兼容性:在升级 sklearn 版本时,注意检查API的兼容性,因为某些函数和参数可能会发生变化。
异常处理:在模型训练和预测过程中,应当添加适当的异常处理机制,以处理可能出现的错误。
这些示例和注意事项为使用 sklearn 库进行机器学习任务提供了基础。在实际应用中,理解数据、问题背景和模型特性对于成功应用机器学习至关重要。

4. sklearn官方社区入口

scikit-learnsklearn)的官方社区主要包括以下几个部分,这里提供一些官方资源和社区平台的链接:

  1. 官方文档:
    • 官方文档是学习和使用scikit-learn的重要资源,包含了教程、用户指南、API参考以及开发者指南等。
    • scikit-learn官方文档
  2. 官方GitHub仓库:
    • scikit-learn的源代码托管在 GitHub 上,用户可以在该平台上报告问题、提出功能请求或贡献代码。
    • scikit-learn GitHub 仓库
  3. 官方用户邮件列表:
    • 用户邮件列表是讨论scikit-learn使用问题的主要平台。
    • scikit-learn 用户邮件列表
  4. 官方开发者邮件列表:
    • 开发者邮件列表用于讨论scikit-learn的开发和维护问题。
    • scikit-learn 开发者邮件列表
  5. Stack Overflow:
    • 在Stack Overflow上,有一个活跃的scikit-learn标签,用户可以提问和回答有关scikit-learn的问题。
    • Stack Overflow - scikit-learn 标签
  6. 官方用户论坛:
    • scikit-learn还有一个官方的用户论坛,用于用户间的交流和讨论。
    • scikit-learn 用户论坛
  7. 官方社交媒体账号:
    • scikit-learn在社交媒体上也有官方账号,比如Twitter,用于发布最新消息和更新。
    • scikit-learn Twitter
      这些资源和社区平台是scikit-learn用户和开发者进行交流、学习和协作的主要场所。

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

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

相关文章

Centos 使用nfs配置共享目录使docker集群所有容器日志统一主机访问

Centos 使用nfs配置共享目录,使docker集群所有容器日志统一存放在主机一个共享目录下,供开发人员访问查看 准备两台或以上Centos服务器 192.168.0.1 nfs服务器 192.168.0.2 nfs客户端 以root用户登录192.168.0.1服务器,执行以下操作 注意先…

【JavaScript】解决 JavaScript 语言报错:Uncaught SyntaxError: Unexpected identifier

文章目录 一、背景介绍常见场景 二、报错信息解析三、常见原因分析1. 缺少必要的标点符号2. 使用了不正确的标识符3. 关键词拼写错误4. 变量名与保留字冲突 四、解决方案与预防措施1. 检查和添加必要的标点符号2. 使用正确的标识符3. 检查关键词拼写4. 避免使用保留字作为变量名…

ReentrantLock的源码实现和原理介绍

目录 一、概述 二、ReentrantLock的整体结构 三、ReentrantLock 和Synchronized相比 四、ReentrantLock 公平锁和非公平锁实现 4.1 ReentrantLock 源码解读 4.1.1 ReentrantLock 类源码解读 4.1.1.1 Lock接口 4.1.1.2 Sync抽象类 4.1.1.3 NonfairSync()和FairSync() 4…

《0基础》学习Python——第十讲

小知识点补充 一、json大字符串 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它以易于阅读和编写的方式为基础,同时也易于解析和生成。因为其简洁性和可读性,JSON已成为数据交换的首选格式。 大字符…

超大模型加载转换Trick

在深度学习领域,大模型的训练和推理通常需要消耗大量的计算和内存。如何高效地加载和使用大模型是一个相当关键的问题。在这篇博客中,我将分享一些关于更快加载大模型和减少内存的技巧。 1.问题分析 假设现在我们有一个236B 超大模型的原始权重的 check…

jmeter-beanshell学习9-放弃beanshell

写这篇时候道心不稳了,前面写了好几篇benashell元件,突然发现应该放弃。想回去改前面的文章,看了看无从下手,反正已经这样了,我淋了雨,那就希望别人也没有伞吧,哈哈哈哈,放在第九篇送…

DHCP原理及配置

目录 一、DHCP原理 DHCP介绍 DHCP工作原理 DHCP分配方式 工作原理 DHCP重新登录 DHCP优点 二、DHCP配置 一、DHCP原理 1 DHCP介绍 大家都知道,现在出门很多地方基本上都有WIFI,那么有没有想过这样一个问题,平时在家里都是“固定”的…

互联网十万个为什么之什么是专有网络VPC?

专有网络VPC有什么优势? 专有网络VPC具有安全可靠、灵活可控、简单易用的特性和较强的可扩展性。 安全可靠 每个VPC都有一个独立的隧道号,一个隧道号对应着一个虚拟化网络。VPC之间通过隧道号进行隔离: 由于VPC内部存在交换机和路由器&#…

PyTorch人脸识别

新书速览|PyTorch深度学习与企业级项目实战-CSDN博客 一套基本的人脸识别系统主要包含三部分:检测器、识别器和分类器,流程架构如图11-3所示: 图11-5 检测器负责检测图片中的人脸,再将检测出来的人脸感兴趣区域(Reg…

如何在单片机外部Flash存储器上部署高效文件系统:从原理到实现

目录 1.Littlefs文件系统 1.1文件系统简介 2 Littlefs文件系统移植到单片机上 2.1 添加源代码 2.2 编辑接口函数 2.3 测试代码 1.Littlefs文件系统 1.1文件系统简介 littlefs文件系统源码下载地址:littlefs-project/littlefs: A little fail-safe filesystem…

Unity Shader学习笔记

Shader类型 类型详情Standard Surface Shader标准表面着色器,基于物理的着色系统,用于模拟各种材质效果,如石头、木材、玻璃、塑料和金属等。Unlit Shader最简单的着色器,不包含光照但包含雾效,只由最基础的Vertex Sh…

Pytorch使用Dataset加载数据

1、前言: 在阅读之前,需要配置好对应pytorch版本。 对于一般学习,使用cpu版本的即可。参考教程点我 导入pytorch包,使用如下命令即可。 import torch # 注意虽然叫pytorch,但是在引用时是引用torch2、神经网络获取…

【C++】—— 初识C++

【C】—— 初识C 一、什么是 C二、C 的发展历史三、C 版本更新四、C 的重要性五、C 在工作领域中的运用六、C 书籍推荐: 一、什么是 C C语言 是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要…

六、STM32F4+标准库+LWIP2.1.2移植+无操作系统

最快最简单的移植LWIP协议栈,可改可不改的东西统一不修改。后期学会了有能力了再回过头来修改,操作复杂理论复杂,同时讲解对新手不是很友好,故此此文档只讲操作无任何理论讲解。 零、所需文件及环境 1、第四章建立好的串…

51单片机11(蜂鸣器硬件设计和软件设计)

一、蜂鸣器硬件设计 1、 2、上面两张图,是针对不同产品的电路图。像左边这一块,是我们的A2,A3,A4的一个产品对应的一个封闭器的硬件电路。而右边的这一块是对应的A5到A7的一个硬件电路。因为A5到A7的一个产品,它的各…

排序算法3_冒泡排序、快速排序

一、冒泡排序 1.1 冒泡排序定义和思路 冒泡排序的基本思想是:通过相邻两个元素之间的比较和交换,使较大的元素逐渐从前面移向后面(升序),就像水底下的气泡一样逐渐向上冒泡,所以被称为“冒泡”排序。  在…

【YOLOv8】 用YOLOv8实现数字式工业仪表智能读数(二)

上一篇圆形表盘指针式仪表的项目受到很多人的关注,咱们一鼓作气,把数字式工业仪表的智能读数也研究一下。本篇主要讲如何用YOLOV8实现数字式工业仪表的自动读数,并将读数结果进行输出,若需要完整数据集和源代码可以私信。 目录 &…

王牌站士Ⅹ---人工智能中的数据隐私:PII 与个人信息

前言 今天,我将讨论如何区分美国和全球范围内不断涌现的数据隐私法所涵盖和不涵盖的数据类型。不同类型的数据受到更严格的保护,具体取决于司法管辖区,因此,如果您使用个人数据进行分析或机器学习,了解这一点很重要。…

痛心!不会用ChatGPT,差点错失一个亿

ChatGPT爆火这么久,今天我们也来聊聊GPT的玩法。等下,什么?你没听说过?没用过? 没听过没用过的朋友们,你们知道当我听到这回答的时候是多么痛心疾首吗? 为了让你们更直观的感受到,举个栗子,如果你用了GPT,就不需要抓耳挠腮的想方案了;如果你用了GPT,或许工作学习效…

MySQL 数据库 - 事务

MySQL 数据库(基础)- 事务 事务简介 事务 是一组操作集合,他是一个不可分割的工作单位,事务会把所有的操作看作是一个整体一起向系统发送请求,即这些操作要么同时成功,要么同时失败。 比如:张…