Python 机器学习 基础 之 构建第一个机器学习应用

news2024/10/6 10:26:51

Python 机器学习 基础 之  构建第一个机器学习应用

目录

Python 机器学习 基础 之  构建第一个机器学习应用

一、简单介绍

二、第一个机器学习测试应用介绍:鸢尾花分类

三、第一个机器学习测试应用 :前置环境,知识点介绍

jupyter notebook 进行开发

知识点介绍

四、第一个机器学习测试应用 :打乱数据,构建训练数据与测试数据

五、第一个机器学习测试应用 :绘制示意图,观察数据

六、第一个机器学习测试应用:构建第一个模型 - k近邻算法,进行预测和评估

1、引入 k 邻近算法,进行数据训练

2、进行预测

3、评估

七、第一个机器学习测试应用:小结

附录


一、简单介绍

Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。Python是一种解释型脚本语言,可以应用于以下领域: Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发、网络爬虫。

Python 机器学习是利用 Python 编程语言中的各种工具和库来实现机器学习算法和技术的过程。Python 是一种功能强大且易于学习和使用的编程语言,因此成为了机器学习领域的首选语言之一。Python 提供了丰富的机器学习库,如Scikit-learn、TensorFlow、Keras、PyTorch等,这些库包含了许多常用的机器学习算法和深度学习框架,使得开发者能够快速实现、测试和部署各种机器学习模型。

Python 机器学习涵盖了许多任务和技术,包括但不限于:

  1. 监督学习:包括分类、回归等任务。
  2. 无监督学习:如聚类、降维等。
  3. 半监督学习:结合了有监督和无监督学习的技术。
  4. 强化学习:通过与环境的交互学习来优化决策策略。
  5. 深度学习:利用深度神经网络进行学习和预测。

通过 Python 进行机器学习,开发者可以利用其丰富的工具和库来处理数据、构建模型、评估模型性能,并将模型部署到实际应用中。Python 的易用性和庞大的社区支持使得机器学习在各个领域都得到了广泛的应用和发展。

二、第一个机器学习测试应用介绍:鸢尾花分类

鸢尾花分类(Iris Classification)是机器学习领域中一个经典的示例,通常用于介绍和学习机器学习算法的基本原理和实践方法。这个问题的目标是根据鸢尾花的花萼长度、花萼宽度、花瓣长度和花瓣宽度等特征,来预测鸢尾花的品种。鸢尾花数据集是由统计学家 Ronald Fisher 在 1936 年收集整理的,其中包含了三种不同品种的鸢尾花(山鸢尾、变色鸢尾和维吉尼亚鸢尾),每种鸢尾花样本采集了四个特征。

鸢尾花(Iris)是一种常见的花卉植物,属于百合科鸢尾属(Iris)植物,是世界上最古老的观赏植物之一。鸢尾花通常生长在温带和亚热带地区,有许多不同的品种和变种。它们以花朵美丽、多样的颜色和形状而闻名,是园艺爱好者和花卉收藏家喜爱的对象之一。

鸢尾花的特征包括:

  1. 花朵形状多样:鸢尾花的花朵形状多样,有些品种的花朵呈扇形、有些呈圆形,还有些呈喇叭形。

  2. 花色丰富:鸢尾花的花色非常丰富,包括紫色、白色、黄色、粉色等各种颜色,有些品种还有斑纹或条纹。

  3. 叶片长而细:鸢尾花的叶片通常比较长而细,呈剑形或线状,叶片的颜色也有所不同,有些品种呈深绿色,有些呈浅绿色。

鸢尾花在园艺上被广泛种植,并且常常作为花园和景观中的装饰植物。由于其美丽的花朵和多样的品种,鸢尾花也经常被用于花束、插花和花艺设计中。此外,鸢尾花在文学、艺术和文化中也有着特殊的象征意义,被赋予了各种寓意和象征。

下面是实现鸢尾花分类的一般步骤:

  1. 数据准备和加载:首先,需要准备鸢尾花数据集,并加载到程序中。可以使用 Python 中的 Pandas 库或者直接使用 Scikit-learn 提供的鸢尾花数据集。

  2. 数据预处理:对数据进行预处理,包括数据清洗、缺失值处理、特征选择、特征缩放等。通常情况下,鸢尾花数据集是比较干净的,不需要进行太多的预处理。

  3. 数据分割:将数据集划分为训练集和测试集,通常使用交叉验证的方法来进行划分,保证训练集和测试集中的样本分布均匀。

  4. 选择模型:选择适合解决鸢尾花分类问题的机器学习模型,常用的包括 K 近邻算法、支持向量机(SVM)、决策树、随机森林等。

  5. 模型训练:使用训练集对选定的模型进行训练,学习模型的参数和特征权重。

  6. 模型评估:使用测试集对训练好的模型进行评估,通常使用准确率、精确率、召回率、F1 分数等指标来评估模型的性能。

  7. 模型调优:根据评估结果对模型进行调优,包括调整超参数、特征选择、模型融合等。

  8. 模型应用:使用训练好的模型对新的未知样本进行预测和分类。

一个简单的鸢尾花分类的实现步骤,具体的实现代码可以使用 Python 中的 Scikit-learn 库来完成。Scikit-learn 提供了丰富的机器学习算法和工具,能够方便地进行模型训练、评估和预测。

三、第一个机器学习测试应用 :前置环境,知识点介绍

jupyter notebook 进行开发

1、机器学习的虚拟环境,输入命名打开 jupyter notebook

如果没有安装如下图

这时候,输入 pip install jupyter 安装即可

此时,安装成功后,再次输入 jupyter notebook

2、打开 jupyter notebook

知识点介绍

假设有一名植物学爱好者对她发现的鸢尾花的品种很感兴趣。她收集了每朵鸢尾花的一些测量数据:花瓣的长度和宽度以及花萼的长度和宽度,所有测量结果的单位都是厘米。

scikit-learn 还有一些鸢尾花的测量数据,这些花之前已经被植物学专家鉴定为属于 setosa、versicolor 或 virginica 三个品种之一。对于这些测量数据,她可以确定每朵鸢尾花所属的品种。我们假设这位植物学爱好者在野外只会遇到这三种鸢尾花。

我们的目标是构建一个机器学习模型,可以从这些已知品种的鸢尾花测量数据中进行学习,从而能够预测新鸢尾花的品种。

因为我们有已知品种的鸢尾花的测量数据,所以这是一个监督学习问题。在这个问题中,我们要在多个选项中预测其中一个(鸢尾花的品种)。这是一个分类 (classification)问题的示例。可能的输出(鸢尾花的不同品种)叫作类别 (class)。数据集中的每朵鸢尾花都属于三个类别之一,所以这是一个三分类问题。

本例中我们用到了鸢尾花(Iris)数据集,这是机器学习和统计学中一个经典的数据集。它包含在 scikit-learn 的 datasets 模块中。

1、调用 load_iris 函数来加载数据:

from sklearn.datasets import load_iris
iris_dataset = load_iris()

2、load_iris 返回的 iris 对象是一个 Bunch 对象与字典非常相似,里面包含键和值:

print("Keys of iris_dataset: \n{}".format(iris_dataset.keys()))

上面的一些键进行简单说明

1)、DESCR 键对应的值是数据集的简要说明。我们这里给出说明的开头部分(你可以自己查看其余的内容):

2)target_names 键对应的值是一个字符串数组,里面包含我们要预测的花的品种:

3)feature_names 键对应的值是一个字符串列表,对每一个特征进行了说明:

4)数据包含在 target 和 data 字段中。data 里面是花萼长度、花萼宽度、花瓣长度、花瓣宽度的测量数据,格式为 NumPy 数组:

data :机器学习中的个体叫作样本 (sample),其属性叫作特征 (feature)。data 数组的形状 (shape)是样本数乘以特征数。这是 scikit-learn 中的约定,你的数据形状应始终遵循这个约定。

5)data 数组的每一行对应一朵花,列代表每朵花的四个测量数据:

6)data 数组打印前 5 个样本的特征数值:

data 里面是花萼长度、花萼宽度、花瓣长度、花瓣宽度的测量数据

从数据中可以看出,前 5 朵花的花瓣宽度都是 0.2cm,第一朵花的花萼最长,是 5.1cm。

7)target 数组包含的是测量过的每朵花的品种,也是一个 NumPy 数组:

8)target 是一维数组,每朵花对应其中一个数据:

9)target 品种被转换成从 0 到 2 的整数:

对应属于 setosa、versicolor 或 virginica 三个品种

上述数字的代表含义由 iris['target_names'] 数组给出:0 代表 setosa,1 代表 versicolor,2 代表 virginica。

四、第一个机器学习测试应用 :打乱数据,构建训练数据与测试数据

利用 scikit-learn 这些数据构建一个机器学习模型,用于预测新测量的鸢尾花的品种。但在将模型应用于新的测量数据之前,需要知道模型是否有效,也就是说,是否应该相信它的预测结果。

不幸的是,不能将用于构建模型的数据用于评估模型。因为模型会一直记住整个训练集,所以对于训练集中的任何数据点总会预测正确的标签。这种“记忆”无法告诉模型的泛化能力如何(换句话说,在新数据上能否正确预测)。

要用新数据来评估模型的性能。新数据是指模型之前没有见过的数据,而有这些新数据的标签。通常的做法是将收集好的带标签数据(此例中是 150 朵花的测量数据)分成两部分。一部分数据用于构建机器学习模型,叫作训练数据(training data)或训练集(training set)。其余的数据用来评估模型性能,叫作测试数据(test data)、测试集(test set)或留出集(hold-out set)。

scikit-learn 中的 train_test_split 函数可以打乱数据集并进行拆分。这个函数将 75% 的行数据及对应标签作为训练集,剩下 25% 的数据及其标签作为测试集。训练集与测试集的分配比例可以是随意的,但使用 25% 的数据作为测试集是很好的经验法则。

scikit-learn 中的数据通常用大写的 X 表示,而标签用小写的 y 表示。这是受到了数学标准公式 f(x)=y 的启发,其中 x 是函数的输入,y 是输出。用大写的 X 是因为数据是一个二维数组(矩阵),用小写的 y 是因为目标是一个一维数组(向量),这也是数学中的约定。

1、对数据调用 train_test_split ,并对输出结果采用下面这种命名方法:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
    iris_dataset['data'], iris_dataset['target'], random_state=0)

在对数据进行拆分之前,train_test_split 函数利用伪随机数生成器将数据集打乱。如果我们只是将最后 25% 的数据作为测试集,那么所有数据点的标签都是 2 ,因为数据点是按标签排序的(参见之前 iris['target'] 的输出)。测试集中只有三个类别之一,这无法告诉我们模型的泛化能力如何,所以我们将数据打乱,确保测试集中包含所有类别的数据。

为了确保多次运行同一函数能够得到相同的输出,我们利用 random_state 参数指定了随机数生成器的种子。这样函数输出就是固定不变的,所以这行代码的输出始终相同。本书用到随机过程时,都会用这种方法指定 random_state 。

2、train_test_split 函数的输出为 X_train 、X_test 、y_train 和 y_test ,它们都是 NumPy 数组。X_train 包含 75% 的行数据,X_test 包含剩下的 25%:

print("X_train shape: {}".format(X_train.shape))
print("y_train shape: {}".format(y_train.shape))

print("X_test shape: {}".format(X_test.shape))
print("y_test shape: {}".format(y_test.shape))

五、第一个机器学习测试应用 :绘制示意图,观察数据

在构建机器学习模型之前,通常最好检查一下数据,看看如果不用机器学习能不能轻松完成任务,或者需要的信息有没有包含在数据中。

此外,检查数据也是发现异常值和特殊值的好方法。举个例子,可能有些鸢尾花的测量单位是英寸而不是厘米。在现实世界中,经常会遇到不一致的数据和意料之外的测量数据。

检查数据的最佳方法之一就是将其可视化。一种可视化方法是绘制散点图 (scatter plot)。

数据散点图将一个特征作为 x 轴,另一个特征作为 y 轴,将每一个数据点绘制为图上的一个点。不幸的是,计算机屏幕只有两个维度,所以我们一次只能绘制两个特征(也可能是 3 个)。用这种方法难以对多于 3 个特征的数据集作图。解决这个问题的一种方法是绘制散点图矩阵 (pair plot),从而可以两两查看所有的特征。如果特征数不多的话,比如我们这里有 4 个,这种方法是很合理的。但是你应该记住,散点图矩阵无法同时显示所有特征之间的关系,所以这种可视化方法可能无法展示数据的某些有趣内容。

训练集中特征的散点图矩阵。数据点的颜色与鸢尾花的品种相对应。为了绘制这张图,我们首先将 NumPy 数组转换成 pandas DataFramepandas 有一个绘制散点图矩阵的函数,叫作 scatter_matrix

矩阵的对角线是每个特征的直方图:

import pandas as pd
import matplotlib.pyplot as plt
from pandas.plotting import scatter_matrix
import mglearn

# 利用X_train中的数据创建DataFrame
# 利用iris_dataset.feature_names中的字符串对数据列进行标记
iris_dataframe = pd.DataFrame(X_train, columns=iris_dataset.feature_names)
# 利用DataFrame创建散点图矩阵,按y_train着色
grr = scatter_matrix(iris_dataframe, c=y_train, figsize=(15, 15), marker='o',
                     hist_kwds={'bins': 20}, s=60, alpha=.8, cmap=mglearn.cm3)
plt.show()

从图中可以看出,利用花瓣和花萼的测量数据基本可以将三个类别区分开。这说明机器学习模型很可能可以学会区分它们。

六、第一个机器学习测试应用:构建第一个模型 - k近邻算法,进行预测和评估

k近邻算法

现在我们可以开始构建真实的机器学习模型了。在 scikit-learn 中有许多可用的分类算法,我们选择使用 k 近邻分类器,因为这是一个很容易理解的算法。构建此模型只需要保存训练集即可。对一个新的数据点做出预测时,算法会在训练集中寻找与这个新数据点距离最近的数据点,然后将找到的数据点的标签赋值给这个新数据点。

在 k 近邻算法中,k 的含义是我们可以考虑训练集中与新数据点最近的任意 k 个邻居(例如,距离最近的 3 个或 5 个邻居),而不是只考虑最近的那一个。然后,我们可以用这些邻居中数量最多的类别来做出预测。

在 scikit-learn 中,所有的机器学习模型都在各自的类中实现,这些类被称为 Estimator 类。k 近邻分类算法是在 neighbors 模块的 KNeighborsClassifier 类中实现的。我们需要将这个类实例化为一个对象,然后才能使用这个模型。这时我们需要设置模型的参数。KNeighborsClassifier 最重要的参数就是邻居的数目,这里我们将其设为 1。

1、引入 k 邻近算法,进行数据训练

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1)

knn 对象对算法进行了封装,既包括用训练数据构建模型的算法,也包括对新数据点进行预测的算法。它还包括算法从训练数据中提取的信息。对于 KNeighborsClassifier 来说,里面只保存了训练集。

想要基于训练集来构建模型,需要调用 knn 对象的 fit 方法,输入参数为 X_train 和 y_train ,二者都是 NumPy 数组,前者包含训练数据,后者包含相应的训练标签:

knn.fit(X_train, y_train)

fit 方法返回的是 knn 对象本身并做原处修改,因此我们得到了分类器的字符串表示。从中可以看出构建模型时用到的参数。几乎所有参数都是默认值,但你也会注意到 n_neighbors=1 ,这是我们传入的参数。scikit-learn 中的大多数模型都有很多参数,但多用于速度优化或非常特殊的用途。你无需关注这个字符串表示中的其他参数。

2、进行预测

在我们可以用这个模型对新数据进行预测了,我们可能并不知道这些新数据的正确标签。想象一下,我们在野外发现了一朵鸢尾花,花萼长 5cm 宽 2.9cm,花瓣长 1cm 宽 0.2cm。这朵鸢尾花属于哪个品种?我们可以将这些数据放在一个 NumPy 数组中,再次计算形状,数组形状为样本数(1)乘以特征数(4):

import numpy as np
X_new = np.array([[5, 2.9, 1, 0.2]])
print("X_new.shape: {}".format(X_new.shape))

注意,我们将这朵花的测量数据转换为二维 NumPy 数组的一行,这是因为 scikit-learn 的输入数据必须是二维数组。

我们调用 knn 对象的 predict 方法来进行预测:

prediction = knn.predict(X_new)
print("Prediction: {}".format(prediction))
print("Predicted target name: {}".format(
       iris_dataset['target_names'][prediction]))

根据我们模型的预测,这朵新的鸢尾花属于类别 0,也就是说它属于 setosa 品种。但我们怎么知道能否相信这个模型呢?我们并不知道这个样本的实际品种,这也是我们构建模型的重点啊!

3、评估

这里需要用到之前创建的测试集。这些数据没有用于构建模型,但我们知道测试集中每朵鸢尾花的实际品种。

因此,我们可以对测试数据中的每朵鸢尾花进行预测,并将预测结果与标签(已知的品种)进行对比。

1)我们可以通过计算精度 (accuracy)来衡量模型的优劣,精度就是品种预测正确的花所占的比例:

y_pred = knn.predict(X_test)
print("Test set predictions:\n {}".format(y_pred))
print("Test set score: {:.2f}".format(np.mean(y_pred == y_test)))

2)我们还可以使用 knn 对象的 score 方法来计算测试集的精度:

print("Test set score: {:.2f}".format(knn.score(X_test, y_test)))

对于这个模型来说,测试集的精度约为 0.97,也就是说,对于测试集中的鸢尾花,我们的预测有 97% 是正确的。根据一些数学假设,对于新的鸢尾花,可以认为我们的模型预测结果有 97% 都是正确的。对于我们的植物学爱好者应用程序来说,高精度意味着模型足够可信,可以使用。

七、第一个机器学习测试应用:小结

我们构思了一项任务,要利用鸢尾花的物理测量数据来预测其品种。我们在构建模型时用到了由专家标注过的测量数据集,专家已经给出了花的正确品种,因此这是一个监督学习问题。一共有三个品种:setosa、versicolor 或 virginica,因此这是一个三分类问题。在分类问题中,可能的品种被称为类别 (class),每朵花的品种被称为它的标签 (label)。

鸢尾花(Iris)数据集包含两个 NumPy 数组:一个包含数据,在 scikit-learn 中被称为 X ;一个包含正确的输出或预期输出,被称为 y 。数组 X 是特征的二维数组,每个数据点对应一行,每个特征对应一列。数组 y 是一维数组,里面包含一个类别标签,对每个样本都是一个 0 到 2 之间的整数。

我们将数据集分成训练集 (training set)和测试集 (test set),前者用于构建模型,后者用于评估模型对前所未见的新数据的泛化能力。

我们选择了 k 近邻分类算法,根据新数据点在训练集中距离最近的邻居来进行预测。该算法在 KNeighborsClassifier 类中实现,里面既包含构建模型的算法,也包含利用模型进行预测的算法。我们将类实例化,并设定参数。然后调用 fit 方法来构建模型,传入训练数据(X_train )和训练输出(y_trian )作为参数。我们用 score 方法来评估模型,该方法计算的是模型精度。我们将 score 方法用于测试集数据和测试集标签,得出模型的精度约为 97%,也就是说,该模型在测试集上 97% 的预测都是正确的。

关键代码:训练和评估过程所必需的代码

X_train, X_test, y_train, y_test = train_test_split(
    iris_dataset['data'], iris_dataset['target'], random_state=0)

knn = KNeighborsClassifier(n_neighbors=1)

knn.fit(X_train, y_train)

print("Test set score: {:.2f}".format(knn.score(X_test, y_test)))

这个代码片段包含了应用 scikit-learn 中任何机器学习算法的核心代码。fitpredictscore 方法是 scikit-learn 监督学习模型中最常用的接口

附录

参考文献:[德] Andreas C. Müller [美] Sarah Guido 《Python Machine Learning Basics Tutorial》

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

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

相关文章

数据结构十一:数组相关经典面试题

本篇博客详细介绍分析数组/顺序表常见的面试题,对于前面所学知识进行一个巩固,同时介绍一些力扣刷题中的一些概念:如:输出型参数等,在刷题中培养自己的编程思维,掌握常见的编程套路,形成题感&am…

安卓应用开发(一):工具与环境

开发工具 Android Studio,用于开发 Android 应用的官方集成开发环境 (IDE)。包括以下功能: 基于Gradle的构建系统 gradle是一个项目构建工具,将源工程打包构建为apk 安卓模拟器统一环境代码编辑模拟器实时更新Github集成Lint功能&#xff0…

fabric部署调用合约示例

一 打包智能合约 ①进入fabric-samples文件夹下的chaincode/fabcar/go目录下执行 GO111MODULEon go mod vendor下载依赖(文件夹下已经有go.mod,不需要使用go mod init生成该module文件)②进入到test-network文件下使用以下命令将二进制文件…

DRF的序列化【2】

【0】前提概要 【1】基于 View JsonResponse 编写的 5 个接口: 序列化自定义处理: 你需要自己编写序列化逻辑。处理 JSON 格式的 POST 请求数据: 从 request.body 中获取数据,并使用 json.loads() 解析成字典,然后创建相应的对象。request.…

Vue入门到关门之Vue3项目创建

一、vue3介绍 1、为什么要学习vue3? vue3的变化: 首先vue3完全兼容vue2,但是vue3不建议用vue2的写法;其次,vue3拥抱TypeScript,之前vue2使用的JavaScript,ts完全兼容js 最后之前学的vue2 是…

JavaScript 中的 Class 类

🔥 引言 在ECMAScript 2015(ES6)中,class 关键字被引入,为JavaScript带来了一种更接近传统面向对象语言的语法糖。类是创建对象的模板,它们封装了数据(属性)和行为(方法&…

25.哀家要长脑子了---哈希表

1.525. 连续数组 - 力扣(LeetCode) 在我对通义千问的一番折磨下,终于弄清楚一点点了。哈希表存储前缀和数组值 用一个counter来记录nums中0、1数量差值的变化。 哈希表map存储某个特定的counter值首次出现的位置。counter的计算:…

2023年乡镇街道边界数据、行政村边界、省市县区划边界、建筑轮廓边界数据、流域边界数据、降雨量分布、气温分布、道路网分布

数据范围:全国行政区划-行政乡镇街道边界 数据类型:面状数据,全国各省市县【乡镇-边界】乡村界、乡村范围 数据属性:标准12位行政区划编码、乡镇名称、所属地区 分辨率:1:2万--1:5万 数据格式:SHP数据&…

力扣100284. 有效单词(C++)

【题解】 (实际在力扣中运行的代码只需要把下方的check函数放到力扣作答区给的模板中就可以) #include <bits/stdc.h> #include <iostream> #include <vector> #include <string> #include <cctype> #include <cstring> #include <st…

【简单介绍下Debian常用命令】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

tomcat-以服务的方式重启tomcat

背景 双击tomcat的bin目录下面的startup.bat&#xff0c;会留下一个cmd的窗口&#xff0c;很不优雅 使用service服务的方式启动&#xff0c;并且设置为自动启动 找到tomcat的bin目录输入cmd&#xff0c;按Enter&#xff0c;进入命令行界面。执行“service.bat install” 。&…

最近惊爆谷歌裁员

Python团队还没解散完&#xff0c;谷歌又对Flutter、Dart动手了。 什么原因呢&#xff0c;猜测啊。 谷歌裁员Python的具体原因可能是因为公司在进行技术栈的调整和优化。Python作为一种脚本语言&#xff0c;在某些情况下可能无法提供足够的性能或者扩展性&#xff0c;尤其是在…

【小菜鸟之---Ansible基础详解】

文章目录 1 【Ansible简介】1.1简介1.2 Ansible 特点1.3 Ansible的工作机制1.4Ansible任务工作模式 2【安装部署】2.1安装命令2.2 Ansible配置文件2.3主机清单配置2.4 基于ssh免密登录2.5常用命令 3【Ansible常用模块】3.1 ping模块3.2 shell模块3.3 command模块3.4 copy模块3.…

【notes2】并发,IO,内存

文章目录 1.线程/协程/异步&#xff1a;并发对应硬件资源是cpu&#xff0c;线程是操作系统如何利用cpu资源的一种抽象2.并发&#xff1a;cpu&#xff0c;线程2.1 可见性&#xff1a;volatile2.2 原子性&#xff08;读写原子&#xff09;&#xff1a;AtomicInteger/synchronized…

【从零开始学架构 前言】整体的学习路线

本文是《从零开始学架构》的第一篇学习笔记&#xff0c;在工作6年左右的这个时间点需要有一些先行的理论来指导即将面临的复杂实践&#xff0c;以便在真正面临复杂实践的时候能有所参照。 主要从以下几个方面和顺序来进行学习 架构基础&#xff1a;从架构设计的本质、历史背景…

# 怎么关闭 win10 系统中自带的【文件预览】功能?关闭WIN10【文件预览】功能的方法

怎么关闭 win10 系统中自带的【文件预览】功能&#xff1f;关闭WIN10【文件预览】功能的方法 win10 系统中自带的【文件预览】功能&#xff0c;默认是开启状态的&#xff0c;如果需要关闭它&#xff0c;一步搞定。 1、打开电脑文件浏览器&#xff0c;随便进入有文件的一个文件…

【Linux】操作系统

上一篇博客我们从硬件的角度谈了计算机&#xff0c;我们说到了计算机的效率跟操作系统写的好不好有着直接的关系&#xff0c;那么这篇博客我们从软件的角度&#xff0c;就来谈一谈究竟什么是操作系统&#xff0c;为什么要有操作系统&#xff1f; 首先我们来大体的认识一下操作…

php基础知识快速入门

一、PHP基本知识 1、php介绍&#xff1a; php是一种创建动态交互性的强有力的服务器脚本语言&#xff0c;PHP是开源免费的&#xff0c;并且使用广泛。PHP是解释性语言&#xff0c;按顺序从上往下执行&#xff0c;无需编译&#xff0c;直接运行。PHP脚本在服务器上运行。 2、ph…

解决 java: 非法字符: ‘\ufeff‘

【报错解释】&#xff1a; 该错误通常发生在尝试编译Java源代码文件时&#xff0c;文件开头的字符是一个字节顺序标记&#xff08;Byte Order Mark&#xff0c;BOM&#xff09;&#xff0c;即\ufeff。在Java中&#xff0c;\ufeff不是一个合法的字符&#xff0c;因此编译器会报…

【码银送书第十九期】《图算法:行业应用与实践》

作者&#xff1a;嬴图团队 01 前言 在当今工业领域&#xff0c;图思维方式与图数据技术的应用日益广泛&#xff0c;成为图数据探索、挖掘与应用的坚实基础。本文旨在分享嬴图团队在算法实践应用中的宝贵经验与深刻思考&#xff0c;不仅促进业界爱好者之间的交流&#xff0c;…