Scikit-learn - 机器学习库初步了解

目录

      • 1. 主要算法分类
        • 1.1 监督学习 (Supervised Learning)
        • 1.2 非监督学习 (Unsupervised Learning)
        • 1.3 半监督学习 (Semi-Supervised Learning)
        • 1.4 强化学习 (Reinforcement Learning)
        • 1.5 遗传算法 (Genetic Algorithm)
      • 2. 选择合适的机器学习模型
        • 2.1 分类 (Classification)
        • 2.2 回归 (Regression)
        • 2.3 聚类 (Clustering)
        • 2.4 降维 (Dimensionality Reduction)
      • 3. 使用 KNN 算法对鸢尾花 (Iris) 进行分类
        • 3.1 导入库与数据
        • 3.2 数据加载
        • 3.3 数据集划分
        • 3.4 模型训练与预测
        • 3.5 结果评估
      • 4. 数据集的加载与生成
        • 4.1 加载真实数据集并进行线性回归
        • 4.2 生成合成回归数据并可视化
      • 5. 模型属性与方法
        • 5.1 区分超参数和学习到的属性
        • 5.2 `LinearRegression`模型的核心属性与功能
          • 5.2.1 查看学习到的属性
          • 5.2.2 查看模型的超参数
          • 5.2.3 评估模型性能
      • 6. 特征缩放

Scikit-learn 是一个开源的 Python 机器学习库,它为分类、回归、聚类等经典任务提供了一整套简洁、高效且易于使用的工具。

1. 主要算法分类

目前主流的算法可分为以下几类:

1.1 监督学习 (Supervised Learning)

向计算机提供已标记的数据(即数据与对应的正确答案/标签),让其学习数据与标签之间的映射关系。

常见的神经网络就属于监督学习的一种方式。

1.2 非监督学习 (Unsupervised Learning)

仅向计算机提供数据,不提供任何标签或答案,由计算机自行探索数据内部的结构、关联和规律。

计算机通过观察数据间的特性,自动进行聚类或降维,总结出隐藏的模式。

1.3 半监督学习 (Semi-Supervised Learning)

结合了监督学习与非监督学习的特点,利用少量有标签的样本大量无标签的样本共同进行训练和分类。

1.4 强化学习 (Reinforcement Learning)

通过“试错”来学习。将计算机(Agent)置于一个陌生的环境中,通过与环境交互获得奖励或惩罚,从而学习到能最大化奖励的行为策略。

Agent自行尝试各种行为,根据行为结果(奖励或惩罚)不断调整和优化策略,最终学会在特定环境下完成任务的方法。

AlphaGo便是应用强化学习的著名案例。

1.5 遗传算法 (Genetic Algorithm)

模拟生物进化论中“适者生存,优胜劣汰”原则的一种优化算法。

过程

  1. 初始化:创建一组初始解决方案(“种群”)。
  2. 评估:根据预设标准评估每个方案的优劣。
  3. 选择:淘汰表现差的方案,选择表现好的方案(“强者”)进行“繁殖”和“变异”。
  4. 迭代:重复评估和选择过程,不断进化出更优的解决方案或模型。

2. 选择合适的机器学习模型

在开始选择模型前,需要对数据进行初步评估:

数据量检查:样本数量 (Sample Size) 是首要的判断依据。

  • 样本数量 < 50:当前数据量过小,训练出的模型可能泛化能力差、准确度低。应优先考虑收集更多的数据。
  • 样本数量 > 50:可以进入下一步,根据任务类型选择合适的算法分支。

可以将机器学习问题大致归为以下四类:

2.1 分类 (Classification)

预测一个数据样本属于哪个预定义的类别。

学习类型:监督学习

2.2 回归 (Regression)

预测一个连续的数值,而非类别。

学习类型:监督学习

2.3 聚类 (Clustering)

在没有预先定义类别的情况下,将数据根据其内在的相似性自动分组(分簇)。

学习类型:非监督学习

2.4 降维 (Dimensionality Reduction)

减少数据中的特征(属性)数量,同时尽可能保留最重要的信息。

学习类型:通常为非监督学习

降维并非简单地从原有特征中挑选一部分,而是通过数学变换,将高维特征(例如,描述房价的20个因素)映射为低维的新特征(例如2个综合因素)。新的特征是原有所有特征的综合体现,旨在抓住数据的主要矛盾。


算法的通用性

许多机器学习算法非常灵活,稍作调整即可用于解决不同类型的问题。例如,随机梯度下降 (SGD) 是一种基础的优化算法,它既可以用于分类任务 (SGDClassifier),也可以用于回归任务 (SGDRegressor),只是在处理和优化目标上有所不同。

特征 (Features) vs. 标签 (Labels):

特征:描述数据点的属性或输入变量。在房价预测案例中,“房屋面积”、“地段”、“建造年份”等都是特征。

标签:我们希望预测的目标变量,即正确答案。在房价预测案例中,“房屋价格”就是标签。监督学习需要同时包含特征和标签的数据,而非监督学习通常只使用特征。


3. 使用 KNN 算法对鸢尾花 (Iris) 进行分类

Scikit-learn 将绝大多数机器学习模型的应用流程进行了统一,掌握此模式即可触类旁通,高效使用库中的各种算法。其核心步骤可概括为:

导入:从 sklearn 库中导入所需的模型

实例化:创建模型对象,可在此步骤设置模型的超参数

训练 (Fit) :使用 .fit(X_train, y_train) 方法,将训练集数据喂给模型进行学习

预测:使用 .predict(X_test) 方法,让训练好的模型对新的测试数据进行预测

3.1 导入库与数据
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split # 用于划分数据集
from sklearn.neighbors import KNeighborsClassifier # KNN模型

numpy: 用于高效的数值计算。

sklearn.datasets: 包含多种可供练习的经典数据集,如此处用到的 load_iris

sklearn.model_selection.train_test_split: 将数据集划分为训练集和测试集的标准工具。

sklearn.neighbors.KNeighborsClassifier: 本次案例中使用的分类算法。

3.2 数据加载

首先,加载 sklearn 内置的鸢尾花数据集,并分离特征和标签。

# 1.载入数据集
iris = datasets.load_iris()# 2.分离数据集
iris_X = iris.data  # 特征
iris_y = iris.target    # 标签

特征 (iris_X) :描述样本属性的数据。每个样本包含 4 个特征。

说明:鸢尾花数据集的 4 个特征分别是:花萼长度 (Sepal Length)、花萼宽度 (Sepal Width)、花瓣长度 (Petal Length)、花瓣宽度 (Petal Width)。

示例数据

[[5.1 3.5 1.4 0.2][4.9 3.  1.4 0.2]]

标签 (iris_y) :每个样本所属的类别。

说明:该数据集包含 3 个类别,分别用 0, 1, 2 表示。

数据概览[0, 0, ..., 1, 1, ..., 2, 2, ...]

3.3 数据集划分

为了客观评估模型的性能,需将数据集划分为训练集(用于学习)和测试集(用于评估)。

# 3.划分数据集
X_train, X_test, y_train, y_test = train_test_split(iris_X, iris_y, test_size=0.3)

train_test_split(...):是 scikit-learn 库中的一个函数,用来把数据集分成两部分:训练集和测试集

test_size=0.3:这个参数表示测试集占总数据的 30%,训练集占 70%

返回值:

X_train, X_test, y_train, y_test

函数会返回 4 个结果:

名称含义
X_train训练集的特征数据
X_test测试集的特征数据
y_train训练集的标签数据
y_test测试集的标签数据

train_test_split的作用:

防止数据泄露:模型在训练时不应接触到测试数据,否则评估结果会过于乐观,无法反映其在未知数据上的真实表现。

自动打乱数据:该函数默认会随机打乱数据顺序再进行划分。这对于机器学习至关重要,可以防止模型因数据原始排列顺序(如按类别排序)而产生偏见。

3.4 模型训练与预测

遵循 Scikit-learn 的标准流程进行模型训练和预测。

# 4.实例化模型
knn = KNeighborsClassifier()# 5.训练模型
knn.fit(X_train, y_train)   # 训练完成后,所有学习到的参数都保存在模型对象自身的属性中,# 6.对测试集进行预测
predictions = knn.predict(X_test)
3.5 结果评估

将模型的预测结果与真实的测试集标签进行对比,以评估模型效果。

print("预测结果:\n",predictions,"\n")
print("真实结果:\n",y_test,)

输出示例:

预测结果:
[1 2 0 1 2 1 0 0 2 0 1 1 2 1 1 0 2 1 1 0 2 2 2 0 0 2 0 0 1 0 2 1 0 1 0 0 12 2 0 2 2 2 2 2] 真实结果: 
[1 2 0 1 2 1 0 0 2 0 1 1 2 1 1 0 2 1 1 0 2 2 2 0 0 2 0 0 1 0 2 1 0 1 0 0 11 2 0 2 2 2 2 2]

结论:可以看到预测结果与真实结果高度相似,但可能存在个别误差。这是机器学习的本质——模型致力于逼近真实规律,而非实现 100% 的精确复刻。如同人类会犯错一样,模型也存在误差范围。


4. 数据集的加载与生成

sklearn.datasets 为机器学习实践提供了丰富的数据来源,主要包含两大类数据:

真实世界数据集

经过清洗和格式化的、源于真实世界问题的经典数据集。通常以 load_* 的形式调用,例如 load_iris()load_boston()

合成数据集

可根据用户指定的参数(如样本数、特征数、噪声水平等)动态生成具有特定统计特性的数据。通常以 make_* 的形式调用,例如 make_regression()make_classification()

4.1 加载真实数据集并进行线性回归

使用加州房价数据集(fetch_california_housing()) 来加载数据并应用线性回归模型。

from sklearn import datasets
from sklearn.linear_model import LinearRegression   # 线性回归模型
from sklearn.model_selection import train_test_split# 1.加载数据集
loaded_data = datasets.fetch_california_housing()# 2.分离数据集
data_X = loaded_data.data   # 特征
data_y = loaded_data.target # 标签# 3.划分数据集
X_train, X_test, y_train, y_test = train_test_split(data_X, data_y,)# 4.实例化模型
model = LinearRegression()# 5.训练模型
model.fit(X_train, y_train)# 6.对测试集进行预测
predictions = model.predict(X_test[:4, :])print("预测房价:", predictions)
print("真实房价:", data_y[:4])

Scikit-learn 的标准化数据接口:
通过 load_* 加载的数据集对象,其特征和标签分别存储在 .data.target 属性中,这种高度统一的模式简化了数据调用流程。

运行结果

预测房价: [2.22492568 4.02422823 1.34033317 0.88996126]
真实房价: [4.526 3.585 3.521 3.413]

预测值与真实值存在差距
模型的预测结果与真实值不完全一致是正常的,这是机器学习的固有特性。原因包括:

模型简化:线性回归模型本身是一个简化的数学抽象,可能无法捕捉所有复杂现实因素。

数据质量:原始数据可能包含噪声或未包含所有关键特征。

缺少优化步骤:为了获得更高精度,通常需要:

  • 数据预处理:例如对特征进行归一化。
  • 模型调优:尝试不同的模型或调整当前模型的超参数。

4.2 生成合成回归数据并可视化

使用 make_regression 生成一组用于回归分析的数据,并用 matplotlib 将其可视化。

import matplotlib.pyplot as plt# 1. 使用 make_regression 生成随机数据
#    n_samples: 样本数量
#    n_features: 特征数量
#    n_targets: 目标值数量
#    noise: 数据的噪声水平,值越大,数据点越离散
X, y = datasets.make_regression(n_samples=100, n_features=1, n_targets=1, noise=10)# 2. 使用散点图进行可视化
plt.scatter(X, y)# 3. 显示图像
plt.show()

make_regression 关键参数

  • n_samples: 生成的样本点数量。
  • n_features: 每个样本点的特征维度。
  • noise: 施加到数据上的高斯噪声的标准差,用于模拟真实世界数据的不完美性。

执行上述代码会生成一张散点图。图中的数据点大致沿一条直线分布,但由于设置了 noise,点会在这条直线周围散布,为训练和测试回归模型提供了一个理想的、可控的数据环境。


5. 模型属性与方法

5.1 区分超参数和学习到的属性

超参数:在创建模型时由用户手动设置的参数,用于控制模型的学习过程,如LinearRegression(fit_intercept=True) 中的 fit_intercept,使用 model.get_params() 方法查看

学习到的属性:模型在调用 .fit() 方法、从数据中学习后所得到的内部参数,Scikit-learn 的所有学习属性都以一个下划线 _ 结尾,例如 coef_,在模型训练 (.fit()) 完成后,通过 model.attribute_ 查看

5.2 LinearRegression模型的核心属性与功能
from sklearn import datasets
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split # 1.加载数据集
loaded_data = datasets.fetch_california_housing()# 2.分离数据集
data_X = loaded_data.data   # 特征
data_y = loaded_data.target # 标签# 3.划分数据集
X_train, X_test, y_train, y_test = train_test_split(data_X, data_y,)# 4.实例化模型
model = LinearRegression()# 5.训练模型
model.fit(X_train, y_train)print("模型系数 (coef_):", model.coef_)print("模型截距 (intercept_):", model.intercept_)print("模型参数 (get_params):", model.get_params())score = model.score(X_test, y_test)
print(f"模型在测试集上的 R^2 得分: {score}")
5.2.1 查看学习到的属性

在线性回归的数学公式 y = w_1*x_1 + ... + w_n*x_n + b 中:

model.coef_ :系数 (Coefficients), 对应于公式中的权重 w,是一个数组,每个值代表对应特征的重要性或影响力。

model.intercept_ :截距 (Intercept), 对应于公式中的偏置项 b,是一个标量值,代表当所有特征值都为0时,预测值的基准。

5.2.2 查看模型的超参数

model.get_params() :以字典形式返回创建模型时设置的所有超参数。如果你没有手动设置,则返回的是默认值。

输出示例{'copy_X': True, 'fit_intercept': True, 'n_jobs': None, 'positive': False}

5.2.3 评估模型性能

model.score(X, y) :对模型进行性能评估并返回一个分数。

score 方法的打分机制:

  • 对于回归模型:返回的是 R² (R-squared, 决定系数), 表示模型对数据变化的解释程度。值域通常在 0 到 1 之间。
  • 对于分类模型:返回的是平均准确率, 即“预测正确的样本数 / 总样本数”。

好的,这是根据您提供的视频字幕和截图资料,为您生成的一份关于特征缩放(Feature Scaling)的学习笔记。


6. 特征缩放

特征缩放是将不同特征的数值范围调整到相似的尺度上。

当一个模型中的多个特征数值范围(量纲)差异巨大时(例如,房屋面积为 0-2000平方英尺,而房间数量为 1-5个),优化算法(如梯度下降)的收敛过程会变得低效。未缩放的特征会导致成本函数 J(θ) 的等高线图呈椭圆形,算法需要多次振荡才能找到最优解(最小值点)。

在进行特征缩放后,成本函数的等高线图会更接近圆形,使得梯度下降可以沿着更直接、更高效的路径收敛到最优点,从而加快模型训练速度并提升性能。

Scikit-Learn 的 preprocessing 模块提供了多种特征缩放工具,preprocessing.scale() 的作用是将数据进行标准化,即分别处理每一列特征,使其平均值为 0,标准差为 1。

代码示例:

from sklearn import preprocessing
import numpy as np# 创建一个特征尺度差异很大的数组
# 第1列范围: -100 ~ 120
# 第2列范围: 2.7 ~ 20
# 第3列范围: -2 ~ 40
a = np.array([[10, 2.7, 3.6],[-100, 5, -2],[120, 20, 40]
], dtype=np.float64)# 使用 scale 函数进行标准化
scaled_a = preprocessing.scale(a)print("原始数据:\n", a)
print("\n标准化后的数据:\n", scaled_a)

输出结果:

原始数据:[[  10.    2.7   3.6][-100.    5.   -2. ][ 120.   20.   40. ]]标准化后的数据:[[ 0.         -0.85170713 -0.55138018][-1.22474487 -0.55187146 -0.852133  ][ 1.22474487  1.40357859  1.40351318]]

可以看到,标准化后,每一列的数值都被缩放到一个相似的范围内。

说明:****StandardScaler 类与 scale 函数
在实际项目中,更推荐使用 sklearn.preprocessing.StandardScaler 类。scale 函数会一步到位地计算并转换整个数据集,但在划分训练集和测试集时,我们必须保证用训练集的参数(均值、标准差)来转换测试集,以防止数据泄露。StandardScaler 对象可以先在训练数据上 fit(),然后用同一个对象去 transform() 训练集和测试集,操作更规范、安全。


特征缩放对支持向量机(SVC)分类准确率的影响:

  1. 生成并可视化数据
    使用 make_classification 生成一组具有较大尺度(scale=100)的样本数据。从散点图可以看出,数据本身是线性可分的,但其特征值分布在 -400 到 400 的广大区间内。
  2. 对比实验
    使用相同的 SVC 模型,在“未缩放”和“已缩放”两种数据上分别进行训练和评估。
    直接在原始数据上训练模型,其在测试集上的准确率仅为 48.8% 。这表明模型完全无法有效学习。
    先使用 preprocessing.scale() 对数据进行标准化,再进行训练和测试,准确率大幅提升至 94.4%
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
from sklearn.svm import SVC
import matplotlib.pyplot as plt# 1. 生成数据
X, y = make_classification(n_samples=300, n_features=2, n_redundant=0, n_informative=2,random_state=22, n_clusters_per_class=1, scale=100
)# 2. 对比实验
X_scaled = preprocessing.scale(X) # 对整个特征集进行标准化
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3)# 3. 训练并评估模型
clf = SVC()
clf.fit(X_train, y_train)
print("进行特征缩放后的准确率: ", clf.score(X_test, y_test)) 

其他缩放方法:归一化 (Min-Max Scaling)
除了标准化,另一种常见的缩放方法是归一化,它通过 sklearn.preprocessing.MinMaxScaler 实现。归一化将每个特征的数值线性地缩放到一个给定的区间,默认为 [0, 1]。其计算公式为:
X_scaled = (X - X_min) / (X_max - X_min)
当数据分布有明显的边界且不符合高斯分布时,归一化是一个不错的选择。

哪些算法需要特征缩放?

高度敏感的算法一般需要特征缩放, 任何基于距离计算的算法(如 K-NN、K-Means)、依赖梯度下降优化的算法(如线性回归、逻辑回归、神经网络)以及依赖特征方差的算法(如主成分分析 PCA)。支持向量机(SVM)对尺度也非常敏感。

基本不敏感则一般不需要: 树模型(如决策树、随机森林、梯度提升树)。因为树模型在选择分裂点时是基于单个特征的,不涉及特征间的距离或幅度比较,因此对尺度不敏感。

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

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

相关文章

关于 idea 里 properties 文件的中文乱码问题

背景 你会发现 properties 文件里的中文可能会出现乱码。 这个因为 properties 规范是使用 iso-8859-1 存储的&#xff0c;不支持中文&#xff08;也不支持西欧里法语、德语里奇怪的字母&#xff09; properties 的标准制定于很早&#xff0c;所以没考虑这么多&#xff0c;prop…

BVH文件 解析 解读的python第三方类库 推荐

我们面临多个第三方库选项用于解析BVH文件&#xff0c;根据您的列表&#xff0c;我将分析几个关键库的特点&#xff0c;并推荐最适合当前任务的库。我们将基于以下标准进行选择&#xff1a; ​​功能性​​&#xff1a;是否能准确解析关节角度数据&#xff0c;支持关键帧操作 ​…

uni-app X能成为下一个Flutter吗?

哈喽&#xff0c;我是老刘 老刘使用Flutter作为客户端主要技术栈的这六七年的时间里&#xff0c;关于跨平台开发的争议和新技术始终没有停过。 “一套代码&#xff0c;多端运行”——这个让无数开发者心动的承诺&#xff0c;究竟是技术革命还是美丽的谎言&#xff1f; 想象一…

Spring Cloud Gateway全栈实践:动态路由能力与WebFlux深度整合

一、为什么需要下一代网关&#xff1f; 传统网关的三大瓶颈&#xff1a; #mermaid-svg-Kdei9Io6KntYGQc4 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Kdei9Io6KntYGQc4 .error-icon{fill:#552222;}#mermaid-svg-…

MongoDB数据存储界的瑞士军刀:cpolar内网穿透实验室第513号挑战

软件名称&#xff1a;MongoDB 操作系统支持&#xff1a;Linux、Windows、macOS&#xff08;Docker版全平台通用&#xff01;&#xff09; 软件介绍&#xff1a; MongoDB是一个基于分布式架构的NoSQL数据库&#xff0c;擅长处理复杂数据类型&#xff08;如嵌套对象、数组&…

SPI TFT全彩屏幕驱动开发及调试

简介SPI&#xff08;Serial Peripheral Interface&#xff09;是一种广泛使用的串行通信协议&#xff0c;常用于微控制器&#xff08;MCU&#xff09;与外围设备&#xff08;如传感器、显示屏、存储器等&#xff09;之间的通信。SPI具有全双工传输、主从结构和较高的传输速率&a…

Linux学习—数据结构(链表2)

1.单向链表6.链表的查找在链表中找到指定的第一个元素沿用遍历思想&#xff0c;每次访问一个节点元素判断是否为要找的节点符合条件返回该节点地址到最后没有找到符号条件的节NULLlinknode *find_linklist(linknode *phead, datatype tmpdata) {linknode *ptmpnode NULL;ptmpn…

MySQL 备份利器 Xtrabackup 全解析:从部署到恢复的实战指南

数据库备份恢复是 DBA 的 “保命” 技能&#xff0c;生产业务不仅要保证有合适的备份策略&#xff0c;也要定期验证备份的有效性和恢复演练流程&#xff0c;因为数据恢复和验证可能会涉及多方合作&#xff0c;演练可以让灾难真正发生时&#xff0c;多方配合有条不紊的将数据恢复…

EAGLE-2:通过动态草稿树加速语言模型推理

温馨提示&#xff1a; 本篇文章已同步至"AI专题精讲" EAGLE-2&#xff1a;通过动态草稿树加速语言模型推理 摘要 现代 Large Language Models&#xff08;LLMs&#xff09;的推理过程既昂贵又耗时&#xff0c;而 speculative sampling 已被证明是一种有效的解决方案…

防水防尘防摔性能很好的智能三防手机,还有22000mAh大电池

在电力巡检的崇山峻岭间&#xff0c;在野外地质勘探的风沙深处&#xff0c;在应急救援的急风骤雨里&#xff0c;传统智能设备因其固有的脆弱性与续航短板往往力不从心&#xff0c;甚至成为保障工作连续性的掣肘。而真正的智能三防手机应是一堵移动的堡垒&#xff0c;集坚不可摧…

Charles中文版抓包工具使用指南 提高API调试和网络优化效率

在现代开发过程中&#xff0c;调试API、捕获HTTP/HTTPS流量和优化应用的网络性能已经成为开发者的常见任务。尤其是在调试复杂的API接口和分析网络请求时&#xff0c;开发者需要一款高效且功能强大的工具。Charles抓包工具凭借其强大的网络调试功能和易用的操作界面&#xff0c…

【C#补全计划:类和对象(九)】接口

一、接口的概念1. 概念&#xff1a;接口是行为的抽象规范&#xff0c;也是一种自定义类型2. 接口声明规范&#xff1a;&#xff08;1&#xff09;不包含成员变量&#xff08;2&#xff09;只包含属性、方法、索引器、事件&#xff08;3&#xff09;成员不能被实现&#xff08;4…

SRS简介及简单demo

SRS介绍 SRS(Simple Realtimes Server)是一款开源的实时流媒体服务器,专注于解决直播、实时互动等场景的流媒体传输问题。SRS 的设计目标是 “简单、稳定、高效”,专门针对实时流媒体协议(如 RTMP、HLS、HTTP-FLV、WebRTC 等)进行优化,专注于解决 “低延迟、高并发” 的…

python基础:数据解析BeatuifulSoup,不需要考虑前端形式的一种获取元素的方法

1.beatuifulSoup 基本用法 beautifulSoup&#xff08;简称bs4&#xff09;是python的一个第三方库&#xff0c;用于解析html和xml文档中提取数据的python库。它能够将复杂的文档转化为树形结构&#xff0c;方便快速定位和提取所需数据以及查找和修改&#xff0c;常常与爬虫框架…

Ubuntu共享文件夹权限设置

在Ubuntu中设置共享文件夹的权限&#xff08;只读、读写、无权限&#xff09;&#xff0c;主要通过两种方式实现&#xff1a;‌文件系统权限‌和‌Samba共享配置‌。以下是详细步骤&#xff1a;‌一、文件系统权限设置&#xff08;基础权限&#xff09;‌1. ‌修改文件夹所有权…

小程序点击菜单栏实现样式动态切换

小程序点击菜单栏背景样式动态切换 前言&#xff1a;今天做一个小程序项目&#xff0c;要做一个菜单栏动态切换的功能&#xff0c;因为这种需求很常见&#xff0c;这次干脆记录一下&#xff0c;帮助别人的同时&#xff0c;自己下次也可以直接照搬使用。 效果截图如下&#xff1…

掌握工程化固件烧录,开启你的技术进阶之路-FPGA ISE(xilinx)

1、电脑需先行安装ISE14.7。若已完成安装&#xff0c;此步骤可略过&#xff1b;若尚未安装&#xff0c;在后续章节会介绍如何安装ISE&#xff0c;由于ISE14.7的安装程序体量庞大&#xff0c;可借助U盘进行传输。同时&#xff0c;电脑需预留至少30G的存储空间以用于安装该程序。…

Android 之 面试八股文

​1.Activity生命周期​​​​问题​​&#xff1a;描述Activity从启动到销毁的完整生命周期方法&#xff0c;并说明onSaveInstanceState()的调用时机。​​参考答案​​&#xff1a;onCreate()→ onStart()→ onResume()&#xff08;活跃状态&#xff09; → onPause()&#x…

暴力解决MySQL连接失败

本文涉及清空root密码完全重置MySQL权限彻底卸载并重装MySQL请务必在测试/本地环境操作&#xff0c;生产环境慎用&#xff01;场景Spring Boot项目连接MySQL一直报Access denied for user rootlocalhost&#xff0c;改密码、换驱动都没用&#xff1f;步骤1&#xff1a;完全重置…

前端开发:CSS(1)—— 什么是CSS?

本文用于记录前端开发的学习过程。前面我们已经学习了html的编写&#xff0c;知道了Web开发的一些最基本的知识&#xff1b;在html的学习过程中&#xff0c;我们提到关于样式的设计和修改常需要使用CSS来实现。那么CSS到底是什么东西呢&#xff1f;它又如何来设计样式呢&#x…