sklearn机器学习库(一)sklearn中的决策树

sklearn机器学习库(一)sklearn中的决策树

sklearn中决策树的类都在”tree“这个模块之下。

tree.DecisionTreeClassifier分类树
tree.DecisionTreeRegressor回归树
tree.export_graphviz将生成的决策树导出为DOT格式,画图专用
tree.export_text以文字形式输出树
tree.ExtraTreeClassifier高随机版本的分类树
tree.ExtraTreeRegressor高随机版本的回归树

1、DecisionTreeClassifier及其重要参数

1.1 重要参数

1.1.1 参数criterion

  • 决策树需要找出最佳节点和最佳的分枝方法,对分类树来说,衡量这个“最佳”的指标叫做“不纯度”。

  • 通常来说,不纯度越低,决策树对训练集的拟合越好。

  • 不纯度基于节点来计算,树中的每个节点都会有一个不纯度,并且子节点的不纯度一定是低于父节点的。

  • criterion这个参数正是用来决定不纯度的计算方法的。sklearn提供了两种选择:

    • 输入”entropy“,使用信息熵(Entropy)

    • 输入”gini“,使用基尼系数(Gini Impurity)

在实际使用中,信息熵和基尼系数的效果基本相同

信息熵的计算比基尼系数缓慢一些,因为基尼系数的计算不涉及对数。

因为信息熵对不纯度更加敏感,所以信息熵作为指标时,决策树的生长会更加“精细”,因此对于高维数据或者噪音很多的数据,信息熵很容易过拟合,基尼系数在这种情况下效果往往比较好。

当模型拟合程度不足的时候,即当模型在训练集和测试集上都表现不太好的时候,使用信息熵。当然,这些不是绝对的。

from sklearn import tree
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_wine
import pandas as pd
# 红酒数据集
wine = load_wine()print(wine.keys())
dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names'])
print(wine.data.shape)
print(wine.target)
print(wine.feature_names)
print(wine.target_names)
(178, 13)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
['alcohol', 'malic_acid', 'ash', 'alcalinity_of_ash', 'magnesium', 'total_phenols', 'flavanoids', 'nonflavanoid_phenols', 'proanthocyanins', 'color_intensity', 'hue', 'od280/od315_of_diluted_wines', 'proline']
['class_0' 'class_1' 'class_2']
pd.concat(# 在列上进行拼接[pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1
)# 划分训练集和测试集
Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data, wine.target,test_size=0.3)print(Xtrain.shape)
print(Xtest.shape)
(124, 13)
(54, 13)
# 模型创建与训练
clf = tree.DecisionTreeClassifier(criterion='entropy')
clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest) # 返回预测的准确度
print(score)
import graphviz# 画出决策树
feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜色强度','色调','od280/od315稀释葡萄酒','脯氨酸']dot = tree.export_graphviz(decision_tree=clf,out_file=None,feature_names=feature_name,class_names=["琴酒","雪莉","贝尔摩德"],filled=True,  # 填充颜色rounded=True  # 钝化角
)graph = graphviz.Source(dot)graph
# 特征重要性
sorted([*zip(feature_name,clf.feature_importances_)],key=lambda x:x[1],reverse=True)
[('od280/od315稀释葡萄酒', 0.4258755013151412),('脯氨酸', 0.34593013978074255),('酒精', 0.08094994077047969),('颜色强度', 0.07600214535710607),('色调', 0.03483435693073402),('苹果酸', 0.02210497552631582),('花青素', 0.014302940319480591),('灰', 0.0),('灰的碱性', 0.0),('镁', 0.0),('总酚', 0.0),('类黄酮', 0.0),('非黄烷类酚类', 0.0)]

总结如下:

  • 通常就使用基尼系数

  • 数据维度很大,噪音很大时使用基尼系数

  • 维度低,数据比较清晰的时候,信息熵和基尼系数没区别

  • 当决策树的拟合程度不够的时候,使用信息熵

  • 总之,两个都试试,不好就换另外一个

决策树在建树时,是靠优化节点来追求一棵优化的树,但最优的节点能够保证最优的树吗?

集成算法被用来解决这个问题:既然一棵树不能保证最优,那就建更多的不同的树,然后从中取最好的。

怎样从一组数据集中建不同的树?在每次分枝时,不从使用全部特征,而是随机选取一部分特征,从中选取不纯度相关指标最优的作为分枝用的节点。这样,每次生成的树也就不同了。

1.1.2 random_state & splitter

  • random_state随机模式参数,默认None,在高维度时随机性会表现更明显,低维度的数据(比如鸢尾花数据集),随机性几乎不会显现。输入任意整数,会一直长出同一棵树,让模型稳定下来。

  • splitter也是用来控制决策树中的随机选项的,有两种输入值

    • 输入”best",决策树在分枝时虽然随机,但是还是会优先选择更重要的特征进行分枝
    • 输入“random",决策树在分枝时会更加随机,树会因为含有更多的不必要信息而更深更大。这也是防止过拟合的一种方式。当然,我们经常会使用剪枝参数来防止过拟合。
clf = tree.DecisionTreeClassifier(criterion='entropy',random_state=30,splitter='random'
)clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest) # 返回预测的准确度
print(score)

1.1.3 剪枝参数

决策树往往会过拟合,它会在训练集上表现很好,在测试集上却表现糟糕。 我们收集的样本数据不可能和整体的状况完全一致,因此当一棵决策树对训练数据有了过于优秀的解释性,它找出的规则必然包含了训练样本中的噪声,并使它对未知数据的拟合程度不足。

剪枝策略对决策树的影响巨大,正确的剪枝策略是优化决策树算法的核心。

sklearn为我们提供了不同的剪枝策略:

1.1.3.1 max_depth

限制树的最大深度,超过设定深度的树枝全部剪掉,这是用得最广泛的剪枝参数,在高维度低样本量时非常有效。

决策树多生长一层,对样本量的需求会增加一倍,所以限制树深度能够有效地限制过拟合。

在集成算法中也非常实用。

实际使用时,建议从=3开始尝试,看看拟合的效果再决定是否增加设定深度

1.1.3.2 min_samples_leaf & min_samples_split

min_samples_leaf,限定一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分枝就不会发生 。

  • 一般搭配max_depth使用,可以让模型变得更加平滑。

  • 这个参数的数量设置得太小会引起过拟合,设置得太大就会阻止模型学习数据。

  • 一般来说,建议从=5开始使用。如果叶节点中含有的样本量变化很大,建议输入浮点数作为样本量的百分比来使用。

  • 同时,这个参数可以保证每个叶子的最小尺寸,可以在回归问题中避免低方差,过拟合的叶子节点出现。

  • 对于类别不多的分类问题,=1通常就是最佳选择。

min_samples_split,限定一个节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分枝,否则分枝就不会发生。

clf = tree.DecisionTreeClassifier(criterion="entropy",random_state=30,splitter="random",max_depth=3,min_samples_leaf=10,min_samples_split=10)clf = clf.fit(Xtrain, Ytrain)dot_data = tree.export_graphviz(clf,feature_names= feature_name,class_names=["琴酒","雪莉","贝尔摩德"],filled=True,rounded=True)graph = graphviz.Source(dot_data)graph
print(clf.score(Xtrain,Ytrain))
print(clf.score(Xtest,Ytest))
0.8951612903225806
0.8888888888888888

1.1.3.3 max_features & min_impurity_decrease

max_features限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃。

max_features是用来限制高维度数据的过拟合的剪枝参数,但其方法比较暴力,是直接限制可以使用的特征数量而强行使决策树停下的参数,在不知道决策树中的各个特征的重要性的情况下,强行设定这个参数可能会导致模型学习不足。如果希望通过降维的方式防止过拟合,建议使用PCA,ICA或者特征选择模块中的降维算法。

min_impurity_decrease限制信息增益的大小,信息增益小于设定数值的分枝不会发生。

1.1.3.4 确认最优的剪枝参数

超参数的学习曲线,是一条以超参数的取值为横坐标,模型的度量指标为纵坐标的曲线,它是用来衡量不同超参数取值下模型的表现的线。 我们可以通过学习曲线,来确定最优的剪枝参数。

import matplotlib.pyplot as plttest = []for i in range(10):clf = tree.DecisionTreeClassifier(max_depth= i + 1,criterion='entropy',random_state=30,splitter='random')clf = clf.fit(Xtrain, Ytrain)score = clf.score(Xtest, Ytest)test.append(score)plt.plot(range(1,11), test,color='green', label='max_depth')
plt.legend()
plt.show()

在这里插入图片描述

这么多参数,需要一个个画学习曲线吗?我们在下面案例中,使用网格搜索来进行多个参数的调参。

剪枝参数的默认值会让树无尽地生长,这些树在某些数据集上可能非常巨大,对内存的消耗也非常巨大。所以如果你手中的数据集非常巨大,你已经预测到无论如何你都是要剪枝的,那提前设定这些参数来控制树的复杂性和大小会比较好。

1.1.3.5 class_weight & min_weight_fraction_leaf

样本不平衡是指在一组数据集中,标签的一类天生占有很大的比例。比如说,在银行要判断“一个办了信用卡的人是否会违约”,是vs否(1%:99%)的比例。这种分类状况下,即便模型什么也不做,全把结果预测成“否”,正确率也能有99%。

因此我们要使用class_weight参数对样本标签进行一定的均衡,给少量的标签更多的权重,让模型更偏向少数类,向捕获少数类的方向建模。该参数默认None,此模式表示自动给与数据集中的所有标签相同的权重。

有了权重之后,样本量就不再是单纯地记录数目,而是受输入的权重影响了,因此这时候剪枝,就需要搭配min_weight_fraction_leaf这个基于权重的剪枝参数来使用。

1.2 重要的属性和接口

决策树来说,最重要的属性是feature_importances_,能够查看各个特征对模型的重要性。

sklearn中许多算法的接口都是相似的,比如说我们之前已经用到的fit和score,几乎对每个算法都可以使用。

除了这两个接口之外,决策树最常用的接口还有apply和predict。apply中输入测试集返回每个测试样本所在的叶子节点的索引,predict输入测试集返回每个测试样本的标签。

#apply返回每个测试样本所在的叶子节点的索引
clf.apply(Xtest)#predict返回每个测试样本的分类/回归结果
clf.predict(Xtest)

所有接口中要求输入X_train和X_test的部分,输入的特征矩阵必须至少是一个二维矩阵。sklearn不接受任何一维矩阵作为特征矩阵被输入。

2、DecisionTreeRegressor及其重要参数

DecisionTreeRegressor几乎所有参数,属性及接口都和分类树一模一样。

需要注意的是,在回归树中,没有标签分布是否均衡的问题,因此没有class_weight这样的参数 。

2.1 criterion

回归树衡量分枝质量的指标,支持的标准有三种:

  • 输入"mse"使用均方误差mean squared error(MSE),父节点和叶子节点之间的均方误差的差额将被用来作为特征选择的标准,这种方法通过使用叶子节点的均值来最小化L2损失。

  • 输入“friedman_mse”使用费尔德曼均方误差,这种指标使用弗里德曼针对潜在分枝中的问题改进后的均方误差

  • 输入"mae"使用绝对平均误差MAE(mean absolute error)

属性中最重要的依然是feature_importances_,接口依然是apply, fit, predict, score最核心 。

回归树中,MSE不只是我们的分枝质量衡量指标,也是我们最常用的衡量回归树回归质量的指标

当我们在使用交叉验证,或者其他方式获取回归树的结果时,我们往往选择均方误差作为我们的评估(在分类树中这个指标是score代表的预测准确率)。在回归中,我们追求的是,MSE越小越好。

回归树的接口score返回的是R平方,并不是MSE。 R平方可以为正为负(如果模型的残差平方和远远大于模型的总平方和,模型非常糟糕,R平方就会为负),而均方误差永远为正。

在这里插入图片描述

其中: u是残差平方和(MSE * N),v是总平方和,N是样本数量,i是每一个数据样本,fi是模型回归出的数值,yi是样本点i实际的数值标签。y帽是真实数值标签的平均数。

注意:

虽然均方误差永远为正,但是sklearn当中使用均方误差作为评判标准时,却是计算负均方误差(neg_mean_squared_error)

这是因为sklearn在计算模型评估指标的时候,会考虑指标本身的性质,均方误差本身是一种误差,所以被sklearn划分为模型的一种损失(loss),因此在sklearn当中,都以负数表示。

真正的均方误差MSE的数值,其实就是neg_mean_squared_error去掉负号的数字。

import pandas as pd
from sklearn import tree
from sklearn.model_selection import cross_val_score# 1、读取波士顿数据集,注意:新版本的sklearn中自带的已经删除
data = pd.read_csv("boston_housing.data", sep='\s+', header=None)x = data.iloc[:, :-1]
y = data.iloc[:, -1]# 2、交叉验证
regressor = tree.DecisionTreeRegressor(random_state=420)
cross_val_score(regressor,x,y,cv=10, # 10折交叉验证scoring='neg_mean_squared_error' # 负均方误差
).mean()

交叉验证是用来观察模型的稳定性的一种方法,我们将数据划分为n份,依次使用其中一份作为测试集,其他n-1份作为训练集,多次计算模型的精确性来评估模型的平均准确程度。训练集和测试集的划分会干扰模型的结果,因此用交叉验证n次的结果求出的平均值,是对模型效果的一个更好的度量。

2.2 一维回归的图像绘制小案例

我们用回归树来拟合正弦曲线,并添加一些噪声来观察回归树的表现。

import numpy as np
from sklearn.tree import DecisionTreeRegressor
import matplotlib.pyplot as plt'''
我们的基本思路是,先创建一组随机的,分布在0~5上的横坐标轴的取值(x),然后将这一组值放到sin函
数中去生成纵坐标的值(y),接着再到y上去添加噪声。
'''
rng = np.random.RandomState(1)X = np.sort(5 * rng.rand(80,1), axis=0)
y = np.sin(X).ravel() # ravel()降维
y[::5] += 3 * (0.5 - rng.rand(16)) # 每隔5个,添加一个噪声数据# 训练模型
regr_1 = DecisionTreeRegressor(max_depth=2)
regr_2 = DecisionTreeRegressor(max_depth=5)
regr_1.fit(X, y)
regr_2.fit(X, y)# 测试数据
X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis] # np.newaxis 升纬
y_1 = regr_1.predict(X_test)
y_2 = regr_2.predict(X_test)# 画图展示
plt.figure()
plt.figure(figsize=(8,6))
plt.scatter(X, y, s=20, edgecolor="black",c="darkorange", label="data")
plt.plot(X_test, y_1, color="cornflowerblue",label="max_depth=2", linewidth=2)
plt.plot(X_test, y_2, color="yellowgreen", label="max_depth=5", linewidth=2)
plt.xlabel("data")
plt.ylabel("target")
plt.title("Decision Tree Regression")
plt.legend()
plt.show()

在这里插入图片描述

回归树学习了近似正弦曲线的局部线性回归。

我们可以看到,如果树的最大深度(由max_depth参数控制)设置得太高,则决策树学习得太精细,它从训练数据中学了很多细节,包括噪声得呈现,从而使模型偏离真实的正弦曲线,形成过拟合。

3、实例:泰坦尼克号幸存者的预测

3.1 数据预处理和特征工程

import pandas as pd
from sklearn.model_selection import cross_val_score,train_test_split,GridSearchCV
from sklearn.tree import DecisionTreeClassifier
from matplotlib import pyplot as plt
data = pd.read_csv(r'data.csv')data.head()

在这里插入图片描述

# 数据预处理# 删除缺失值过多的列、以及和y没有关系的列
data.drop(['Cabin','Name','Ticket'], inplace=True,axis=1)
# 填充缺失值# 缺失值较少的填充均值
data['Age'] = data['Age'].fillna(data['Age'].mean())
# 缺失值较多的,直接删除
data = data.dropna()# 将分类变量转换为数值变量# 性别是2分类变量
print(data['Sex'].unique().tolist())
# 性别转换为 male = 1 female = 0
data['Sex'] = (data['Sex'] == 'male').astype(int)# Embarked是3分类变量
print(data['Embarked'].unique().tolist())# 直接转换为list的下标
labels = data['Embarked'].unique().tolist()
data['Embarked'] = data['Embarked'].apply(lambda x: labels.index(x))

3.2 模型训练

# 划分训练集和测试集
X = data.iloc[:, 2:]
y = data.iloc[:, 1]Xtrain, Xtest, Ytrain, Ytest = train_test_split(X, y, test_size=0.3)
# 导入模型,粗略跑一下,查看结果
clf = DecisionTreeClassifier(random_state=25)
clf = clf.fit(Xtrain, Ytrain)
score_ = clf.score(Xtest, Ytest)print(score_)
# 通过学习曲线,观察在不同深度下模型拟合的状况
train_score = []
test_score = []for i in range(10):clf = DecisionTreeClassifier(random_state=25, max_depth=(i + 1),criterion='entropy')clf = clf.fit(Xtrain, Ytrain)score_train = clf.score(Xtest, Ytest)# 使用全量的数据集求取交叉验证的均值score_test = cross_val_score(clf, X, y, cv=10).mean()train_score.append(score_train)test_score.append(score_test)# 打印最大的测试分数,以及所在的索引
print(max(test_score),test_score.index(max(test_score)))
# 画图
plt.plot(range(1,11),train_score,color='orange',label='train')
plt.plot(range(1,11),test_score,color='green',label='test')
plt.xticks(range(1,11))
plt.legend()
plt.show()

在这里插入图片描述

# 使用网格搜搜调整多个参数
import numpy as npgini_thresholds = np.linspace(0,0.5,20)
parameters = {'splitter':('best','random'),'criterion':("gini","entropy"),"max_depth":[*range(1,10)],'min_samples_leaf':[*range(1,50,5)],'min_impurity_decrease':[*np.linspace(0,0.5,20)]}clf = DecisionTreeClassifier(random_state=25)gs = GridSearchCV(clf,parameters, cv=10)gs.fit(Xtrain, Ytrain)print(gs.best_params_)
print(gs.best_score_)
{'criterion': 'entropy', 'max_depth': 4, 'min_impurity_decrease': 0.0, 'min_samples_leaf': 11, 'splitter': 'random'}
0.8087301587301587

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

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

相关文章

【论文阅读】DEPCOMM:用于攻击调查的系统审核日志的图摘要(SP-2022)

Xu Z, Fang P, Liu C, et al. Depcomm: Graph summarization on system audit logs for attack investigation[C]//2022 IEEE Symposium on Security and Privacy (SP). IEEE, 2022: 540-557. 1 摘要 ​ 提出了 DEPCOMM,这是一种图摘要方法,通过将大图划…

axios请求

参考:https://www.axios-http.cn/docs/instance

windows安装docker 异常解决

Docker for Windows 安装Docker for Windows报错信息:Docker Desktop requires Windows 10 Pro/Enterprise/Home (18363). 解决方式 1.更新 Windows 系统版本Windows10Upgrade9252.exe 下载地址下载完运行 Windows10Upgrade9252.exe更新完,安装 Docke…

【Hilog】鸿蒙系统日志源码分析

【Hilog】鸿蒙系统日志源码分析 Hilog采用C/S结构,Hilogd作为服务端提供日志功能。Client端通过API调用(最终通过socket通讯)与HiLogd打交道。简易Block图如下。 这里主要分析一下。Hilog的读、写、压缩落盘,以及higlog与android…

python异步IO完全指南

原地址:https://flyingbyte.cc/post/async_io/ python异步IO完全指南 做为一种并行编程的範式,异步IO在Python中非常受重视,从Python3.4到3.7快速演进。 我们已经有多线程,多进程,并发(concurrency&#x…

第R3周 - 天气预测

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 我的环境: 语言环境:Python3.10.7编译器:VScode深度学习环境:TensorFlow 2.13.0 数据集: 一、前期…

健启星|医学营养的市场先行者

随着《“健康中国2030”规划纲要》、《国民营养计划(2017-2030年)》等政策的陆续发布,标志着以传统药物治疗为中心的医疗模式时代正式转型到以预防和康复为中心的新的医学营养时代。在此背景下,符合时代需求的特医食品成为“医学营…

UML箭头汇总

参考:http://www.cnblogs.com/damsoft/archive/2016/10/24/5993602.html 1.UML简介 Unified Modeling Language (UML)又称统一建模语言或标准建模语言。 简单说就是以图形方式表现模型,根据不同模型进行分类,在UML 2.0中有13种图&#xff…

Spring Boot | 使用mkcert本地生成SSL证书配置后端接口为HTTPS协议

Tips:本篇博客是 Windows 版本的使用教程,cmd 中执行的命令前缀是下载的软件名称,需要改成自己下载软件的名称! 下载软件 首先去 GitHub 仓库中下载软件,下载完成后将文件保存在英文路径下的文件夹,之后以…

Zookeeper 面试题

一、ZooKeeper 基础题 1.1、Zookeeper 的典型应用场景 Zookeeper 是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员可以使用它来进行分布式数据的发布和订阅。 通过对 Zookeeper 中丰富的数据节点进行交叉使用,配合 Watcher 事件通知机…

搭建了个腾讯滑块服务,直接取ticket的,仅供测试.

最近闲着没事搭建了个TX滑块验证码服务,C#写的. 接口是rest接口 提交任务POST http://47.104.132.20:19090/task/addTask 提交数据: { "url": "https://ssl.captcha.qq.com/template/wireless_mqq_captcha.html?stylesimple&aid16&uin3557247785…

2023年中国负极石墨用坩埚市场规模现状及前景分析:负极材料为行业增长助推器[图]

负极石墨用坩埚分为再生坩埚和石墨匣钵,其中,再生坩埚主要应用于艾奇逊炉工艺的石墨化工序,石墨匣钵主要应用于预碳化和碳化工序。 负极石墨用坩埚分类 资料来源:共研产业咨询(共研网) 得益于动力电池的旺…

手机怎样换ip地址 更改手机IP地址有哪些方式

ip地址怎么改:使用深度ip转换器 在互联网时代,IP地址扮演着网络世界中的独特标识符。它是我们在上网时必不可少的元素,负责为设备提供独立的身份,并将信息传输到正确的目的地。然而,有时我们需要改变IP地址&#xff0c…

Kotlin 基础教程一

Kotlin 基本数据类型 Java | Kotlin byte Byte short Short int Int long Long float Float double Double boolean Boolean c…

基于身份的安全威胁正在迅速增长

根据端点安全和威胁情报供应商 CrowdStrike 发布的一份报告,目前最危险的网络安全威胁是能够访问给定系统合法身份信息的攻击者。 根据该报告,交互式入侵(该公司将其定义为攻击者积极工作以在受害者系统上实现某种非法目的的入侵)…

Java分布式微服务3——Docker

文章目录 Docker介绍安装DockerDocker基础操作Docker服务的启动镜像命令容器命令1. 从docker hub去查看Nginx容器的运行命令2. 查看所有容器状态3. 查看容器日志4. 进入Nginx容器执行命令,修改Html内容,添加“Hello World”5. 停止与开始容器6. 删除容器…

01 - 工作区、暂存区、版本库、远程仓库 - 以一次连贯的提交操作为例

1. 工作区、暂存区、版本库、远程仓库 以一次连贯的提交操作为例。 1.1 工作区 Git的工作区也就是我们平时编辑代码的目录文件夹。 新建一个kongfu_person.txt文件,工作区的变化: 1.2 工作区 > 暂存区:git add 1.3 暂存区 > 版本库…

配置docker,案例复现

配置docker(系统为centos) 1.检查操作系统环境: docker要求CentOS系统的内核版本高于 3.10 ,通过 uname -r 命令查看你当前的内核版本是否支持安装docker 2.查看你是否拥有旧的版本,有的话卸载,没有的话直接略过该步骤 sudo yum remove d…

pytest结合 allure 打标记之的详细使用

前言 前面我们提到使用allure 可以生成漂亮的测试报告,下面就Allure 标记我们做详细介绍。 allure 标记 包含:epic,feature, story, title, testcase, issue, description, step, serverity, link, attachment 常用的标记 allure.feature…

C语言笔试训练【第九天】

文章目录 👿1、下列程序的输出是( )💎2、二维数组X按行顺序存储,其中每个元素占1个存储单元。若 X[4][4] 的存储地址为 Oxf8b82140 , X[9][9] 的存储地址为 Oxf8b8221c ,则 X[7][7] 的存储地址为( &#xf…