当前位置: 首页 > news >正文

Python 中的分步机器学习

1.安装 Python 和 SciPy 平台。

# Check the versions of libraries# Python version
import sys
print('Python: {}'.format(sys.version))
# scipy
import scipy
print('scipy: {}'.format(scipy.__version__))
# numpy
import numpy
print('numpy: {}'.format(numpy.__version__))
# matplotlib
import matplotlib
print('matplotlib: {}'.format(matplotlib.__version__))
# pandas
import pandas
print('pandas: {}'.format(pandas.__version__))
# scikit-learn
import sklearn
print('sklearn: {}'.format(sklearn.__version__))
Python: 3.12.2 | packaged by Anaconda, Inc. | (main, Feb 27 2024, 17:28:07) [MSC v.1916 64 bit (AMD64)]
scipy: 1.13.0
numpy: 1.26.4
matplotlib: 3.8.4
pandas: 2.2.2
sklearn: 1.4.2

2 Loading the dataset. 加载数据集。

我们将使用鸢尾花数据集。该数据集之所以著名,是因为它几乎被每个人用作机器学习和统计中的“hello world”数据集。
该数据集包含 150 个鸢尾花的观察结果。有四列以厘米为单位的花朵测量值。第五列是观察到的花的种类。所有观察到的花都属于三个物种之一。

2.1导入库

# Load libraries
from pandas import read_csv
from pandas.plotting import scatter_matrix
from matplotlib import pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC

2.2加载数据集

我们可以直接从 UCI 机器学习存储库加载数据。
我们使用 pandas 来加载数据。接下来我们还将使用 pandas 通过描述性统计和数据可视化来探索数据。
请注意,我们在加载数据时指定每列的名称。这将有助于我们稍后探索数据。

...
# Load dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = read_csv(url, names=names)
print(dataset)
     sepal-length  sepal-width  petal-length  petal-width           class
0             5.1          3.5           1.4          0.2     Iris-setosa
1             4.9          3.0           1.4          0.2     Iris-setosa
2             4.7          3.2           1.3          0.2     Iris-setosa
3             4.6          3.1           1.5          0.2     Iris-setosa
4             5.0          3.6           1.4          0.2     Iris-setosa
..            ...          ...           ...          ...             ...
145           6.7          3.0           5.2          2.3  Iris-virginica
146           6.3          2.5           5.0          1.9  Iris-virginica
147           6.5          3.0           5.2          2.0  Iris-virginica
148           6.2          3.4           5.4          2.3  Iris-virginica
149           5.9          3.0           5.1          1.8  Iris-virginica[150 rows x 5 columns]

3 Summarizing the dataset.总结数据集。

在此步骤中,我们将通过几种不同的方式查看数据:
1 数据集的维度。
2 查看数据本身。
3 所有属性的统计摘要。
4 按类变量对数据进行细分。

3.1 数据集维度

...
# shape
print(dataset.shape)
(150, 5)

3.2 查看数据

#head
print(dataset.head(20))
    sepal-length  sepal-width  petal-length  petal-width        class
0            5.1          3.5           1.4          0.2  Iris-setosa
1            4.9          3.0           1.4          0.2  Iris-setosa
2            4.7          3.2           1.3          0.2  Iris-setosa
3            4.6          3.1           1.5          0.2  Iris-setosa
4            5.0          3.6           1.4          0.2  Iris-setosa
5            5.4          3.9           1.7          0.4  Iris-setosa
6            4.6          3.4           1.4          0.3  Iris-setosa
7            5.0          3.4           1.5          0.2  Iris-setosa
8            4.4          2.9           1.4          0.2  Iris-setosa
9            4.9          3.1           1.5          0.1  Iris-setosa
10           5.4          3.7           1.5          0.2  Iris-setosa
11           4.8          3.4           1.6          0.2  Iris-setosa
12           4.8          3.0           1.4          0.1  Iris-setosa
13           4.3          3.0           1.1          0.1  Iris-setosa
14           5.8          4.0           1.2          0.2  Iris-setosa
15           5.7          4.4           1.5          0.4  Iris-setosa
16           5.4          3.9           1.3          0.4  Iris-setosa
17           5.1          3.5           1.4          0.3  Iris-setosa
18           5.7          3.8           1.7          0.3  Iris-setosa
19           5.1          3.8           1.5          0.3  Iris-setosa

3.3 统计总结

#description:
print(dataset.describe())
       sepal-length  sepal-width  petal-length  petal-width
count    150.000000   150.000000    150.000000   150.000000
mean       5.843333     3.054000      3.758667     1.198667
std        0.828066     0.433594      1.764420     0.763161
min        4.300000     2.000000      1.000000     0.100000
25%        5.100000     2.800000      1.600000     0.300000
50%        5.800000     3.000000      4.350000     1.300000
75%        6.400000     3.300000      5.100000     1.800000
max        7.900000     4.400000      6.900000     2.500000

3.4 类别分布

看一下属于每个类的实例(行)数。我们可以将其视为绝对计数。

...
# class distribution
# print(dataset.groupby('class'))
print(dataset.groupby('class').size())
class
Iris-setosa        50
Iris-versicolor    50
Iris-virginica     50
dtype: int64

3.5 完整示例

# summarize the data
from pandas import read_csv
# Load dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = read_csv(url, names=names)
# shape
print(dataset.shape)
# head
print(dataset.head(20))
# descriptions
print(dataset.describe())
# class distribution
print(dataset.groupby('class').size())
(150, 5)sepal-length  sepal-width  petal-length  petal-width        class
0            5.1          3.5           1.4          0.2  Iris-setosa
1            4.9          3.0           1.4          0.2  Iris-setosa
2            4.7          3.2           1.3          0.2  Iris-setosa
3            4.6          3.1           1.5          0.2  Iris-setosa
4            5.0          3.6           1.4          0.2  Iris-setosa
5            5.4          3.9           1.7          0.4  Iris-setosa
6            4.6          3.4           1.4          0.3  Iris-setosa
7            5.0          3.4           1.5          0.2  Iris-setosa
8            4.4          2.9           1.4          0.2  Iris-setosa
9            4.9          3.1           1.5          0.1  Iris-setosa
10           5.4          3.7           1.5          0.2  Iris-setosa
11           4.8          3.4           1.6          0.2  Iris-setosa
12           4.8          3.0           1.4          0.1  Iris-setosa
13           4.3          3.0           1.1          0.1  Iris-setosa
14           5.8          4.0           1.2          0.2  Iris-setosa
15           5.7          4.4           1.5          0.4  Iris-setosa
16           5.4          3.9           1.3          0.4  Iris-setosa
17           5.1          3.5           1.4          0.3  Iris-setosa
18           5.7          3.8           1.7          0.3  Iris-setosa
19           5.1          3.8           1.5          0.3  Iris-setosasepal-length  sepal-width  petal-length  petal-width
count    150.000000   150.000000    150.000000   150.000000
mean       5.843333     3.054000      3.758667     1.198667
std        0.828066     0.433594      1.764420     0.763161
min        4.300000     2.000000      1.000000     0.100000
25%        5.100000     2.800000      1.600000     0.300000
50%        5.800000     3.000000      4.350000     1.300000
75%        6.400000     3.300000      5.100000     1.800000
max        7.900000     4.400000      6.900000     2.500000
class
Iris-setosa        50
Iris-versicolor    50
Iris-virginica     50
dtype: int64

4Visualizing the dataset.可视化数据集。

我们将看两种类型的图:
1 单变量图可以更好地理解每个属性。
2 多元图可以更好地理解属性之间的关系。

4.1 单变量图

鉴于输入变量是数字,我们可以为每个变量创建箱线图和须线图。

# box and whisker plots
dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
plt.show
<function matplotlib.pyplot.show(close=None, block=None)>

我们还可以创建每个输入变量的直方图以了解分布。

#histograms
dataset.hist()
plt.show()

4.2 多元图

现在,我们可以查看变量之间的相互作用。
首先,让我们看一下所有属性的散点图。这可能有助于发现输入变量之间的结构化关系

# scatter plot matrix
scatter_matrix(dataset)
plt.show()

4.3 完整示例

# visualize the data
from pandas import read_csv
from pandas.plotting import scatter_matrix
from matplotlib import pyplot as plt
# Load dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = read_csv(url, names=names)
# box and whisker plots
dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
plt.show()
# histograms
dataset.hist()
plt.show()
# scatter plot matrix
scatter_matrix(dataset)
plt.show()

5 Evaluating some algorithms.评估一些算法。

现在是时候创建一些数据模型并估计其在看不见的数据上的准确性了。

这是我们将在此步骤中涵盖的内容:

1 分开验证数据集。

2 设置测试线束以使用10倍的交叉验证。

3 构建多个不同的模型以预测花朵测量的物种

4 选择最佳模型。

5.1创建验证数据集

我们需要知道我们创建的模型很好。
稍后,我们将使用统计方法来估计我们在看不见的数据上创建的模型的准确性。我们还希望通过对实际看不见的数据进行评估,对最佳模型的准确性进行更具体的估计。
也就是说,我们将删除算法无法看到的一些数据,我们将使用这些数据来获得第二个独立的想法,即最佳模型的实际性如何。
我们将将加载的数据集分为两个,其中80%将用于训练,评估和选择我们的模型,而20%我们将作为验证数据集退缩。

#split-out validation dataset
array = dataset.values
X = array[:, 0:4]
y = array[:, 4]
X_train, X_validation, Y_train, Y_validation = train_test_split(X, y, test_size=0.20, random_state=1)

现在,可以在X_Train和Y_Train中使用训练数据,用于准备模型以及X_validation和Y__Validation集,我们可以在以后使用。

5.2 测试工具

我们将使用分层 10 倍交叉验证来估计模型准确性。

这会将我们的数据集分为 10 个部分,对 9 个部分进行训练,对 1 个部分进行测试,然后对训练-测试分割的所有组合重复此操作。

分层意味着数据集的每次折叠或分割都旨在具有与整个训练数据集中存在的相同的类示例分布。

我们通过 random_state 参数将随机种子设置为固定数字,以确保每个算法在训练数据集的相同分割上进行评估。

我们使用“准确性”指标来评估模型。

这是正确预测的实例数除以数据集中的实例总数再乘以 100 得出的百分比(例如,准确率 95%)。当我们接下来运行构建和评估每个模型时,我们将使用评分变量。

5.3 构建模型

我们不知道哪种算法适合解决这个问题或使用什么配置。

我们从图中了解到,某些类在某些维度上是部分线性可分的,因此我们预计总体上会得到良好的结果。

让我们测试 6 种不同的算法:

  • Logistic Regression (LR)
    逻辑回归 (LR)
  • Linear Discriminant Analysis (LDA)
    线性判别分析 (LDA)
  • K-Nearest Neighbors (KNN).
    K 最近邻 (KNN)。
  • Classification and Regression Trees (CART).
    分类和回归树 (CART)。
  • Gaussian Naive Bayes (NB).
    高斯朴素贝叶斯 (NB)。
  • Support Vector Machines (SVM).
    支持向量机 (SVM)。

这是简单线性(LR 和 LDA)、非线性(KNN、CART、NB 和 SVM)算法的良好组合。

让我们构建并评估我们的模型:

# from sklearn.linear_model import LogisticRegression
# from sklearn.tree import DecisionTreeClassifier
# from sklearn.neighbors import KNeighborsClassifier
# from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
# from sklearn.naive_bayes import GaussianNB
# from sklearn.svm import SVC
# spot check algorithms
models = []
models.append(('LR', LogisticRegression(solver = 'liblinear', multi_class = 'ovr' )))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC(gamma = 'auto')))
# evaluate each model in turn
results = []
names = []
for name, model in models:kfold = StratifiedKFold(n_splits=10, random_state=1, shuffle=True)cv_results = cross_val_score(model, X_train, Y_train, cv=kfold, scoring='accuracy')results.append(cv_results)names.append(name)print('%s: %f (%f)' % (name, cv_results.mean(), cv_results.std()))
LR: 0.941667 (0.065085)
LDA: 0.975000 (0.038188)
KNN: 0.958333 (0.041667)
CART: 0.950000 (0.040825)
NB: 0.950000 (0.055277)
SVM: 0.983333 (0.033333)

5.4 选择最佳模型

我们现在有 6 个模型以及每个模型的准确度估计。我们需要对模型进行相互比较并选择最准确的模型。

注意:由于算法或评估过程的随机性或数值精度的差异,您的结果可能会有所不同。考虑运行该示例几次并比较平均结果。

在这种情况下,我们可以看到支持向量机 (SVM) 的估计准确度分数最大,约为 0.98 或 98%。

我们还可以创建模型评估结果图,并比较每个模型的分布和平均准确度。每个算法都有一组准确度度量,因为每个算法都被评估了 10 次(通过 10 次交叉验证)。

比较每种算法的结果样本的一个有用方法是为每个分布创建箱须图并比较分布。

#compare algorithms
plt.boxplot(results, labels= names)
plt.title('Algorithm Comparison')
plt.show()

我们可以看到箱线图和须线图在范围的顶部被压扁,许多评估达到了 100% 的准确度,有些则降低到了 80% 的准确度。

5.5 完整示例

作为参考,我们可以将前面的所有元素组合到一个脚本中。

下面列出了完整的示例。

# compare algorithms
from pandas import read_csv
from matplotlib import pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import StratifiedKFold
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
# Load dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = read_csv(url, names=names)
# Split-out validation dataset
array = dataset.values
X = array[:, 0:4]
y = array[:, 4]
X_train, X_validation, Y_train, Y_validation = train_test_split(X, y, test_size=0.20, random_state=1)
# Spot Check Algorithms
models = []
models.append(('LR', LogisticRegression(solver='liblinear', multi_class='ovr')))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC(gamma='auto')))
# evaluate each model in turn
results = []
names = []
for name, model in models:kfold = StratifiedKFold(n_splits=10, random_state=1, shuffle=True)cv_results = cross_val_score(model, X_train, Y_train, cv=kfold, scoring='accuracy')results.append(cv_results)names.append(name)print('%s: %f (%f)' % (name, cv_results.mean(), cv_results.std()))
# Compare Algorithms
plt.boxplot(results, labels=names)
plt.title('Algorithm Comparison')
plt.show()
LR: 0.941667 (0.065085)
LDA: 0.975000 (0.038188)
KNN: 0.958333 (0.041667)
CART: 0.958333 (0.041667)
NB: 0.950000 (0.055277)
SVM: 0.983333 (0.033333)

6 Making some predictions.做出一些预测。

我们必须选择一种算法来进行预测。

上一节的结果表明 SVM 可能是最准确的模型。我们将使用这个模型作为我们的最终模型。

现在我们想要了解模型在验证集上的准确性。

这将使我们能够对最佳模型的准确性进行独立的最终检查。保留验证集很有价值,以防万一您在训练过程中出现失误,例如训练集过度拟合或数据泄漏。这两个问题都会导致过于乐观的结果。

6.1 做出预测

我们可以将模型拟合到整个训练数据集上,并对验证数据集进行预测。

#make predictions on validaton dataset
model = SVC(gamma='auto')
model.fit(X_train, Y_train)
predictions = model.predict(X_validation)

您可能还想对单行数据进行预测。有关如何执行此操作的示例,请参阅教程:https://machinelearningmastery.com/make-predictions-scikit-learn/

您可能还想将模型保存到文件并稍后加载以对新数据进行预测。有关如何执行此操作的示例,请参阅教程:https://machinelearningmastery.com/save-load-machine-learning-models-python-scikit-learn/

6.2 评估预测

我们可以通过将预测与验证集中的预期结果进行比较来评估预测,然后计算分类准确性以及混淆矩阵和分类报告。

# Evaluate predictions 
print(accuracy_score(Y_validation, predictions))
print(confusion_matrix(Y_validation, predictions))
print(classification_report(Y_validation, predictions))
0.9666666666666667
[[11  0  0][ 0 12  1][ 0  0  6]]precision    recall  f1-score   supportIris-setosa       1.00      1.00      1.00        11
Iris-versicolor       1.00      0.92      0.96        13Iris-virginica       0.86      1.00      0.92         6accuracy                           0.97        30macro avg       0.95      0.97      0.96        30weighted avg       0.97      0.97      0.97        30

我们可以看到,在保留数据集上,准确率为 0.966,即 96% 左右。

混淆矩阵提供了所犯错误的指示。

最后,分类报告按精度、召回率、f1 分数和支持度对每个类别进行了细分,显示出出色的结果(假设验证数据集很小)。

6.3 完整示例

# make predictions
from pandas import read_csv
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.svm import SVC# load dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = read_csv(url, names=names)
# split-out validation dataset
array = dataset.values
X = array[:, 0:4]
y = array[:, 4]
X_train, X_validation, Y_train, Y_validation = train_test_split(X, y, test_size=0.20, random_state=1)
# make predictions on validation dataset
model = SVC(gamma='auto')
model.fit(X_train, Y_train)
predictions = model.predict(X_validation)
# evaluate predictions
print(accuracy_score(Y_validation, predictions))
print(confusion_matrix(Y_validation, predictions))
print(classification_report(Y_validation, predictions))
0.9666666666666667
[[11  0  0][ 0 12  1][ 0  0  6]]precision    recall  f1-score   supportIris-setosa       1.00      1.00      1.00        11
Iris-versicolor       1.00      0.92      0.96        13Iris-virginica       0.86      1.00      0.92         6accuracy                           0.97        30macro avg       0.95      0.97      0.96        30weighted avg       0.97      0.97      0.97        30

相关文章:

Python 中的分步机器学习

1.安装 Python 和 SciPy 平台。 # Check the versions of libraries# Python version import sys print(Python: {}.format(sys.version)) # scipy import scipy print(scipy: {}.format(scipy.__version__)) # numpy import numpy print(numpy: {}.format(numpy.__version__)…...

C++错题集(持续更新ing)

Day 1 一、选择题 解析&#xff1a; 在数字不会溢出的前提下&#xff0c;对于正数和负数&#xff0c;有&#xff1a; 1&#xff09;左移n位&#xff0c;相当于操作数乘以2的n次方&#xff1b; 2&#xff09;右移n位&#xff0c;相当于操作数除以2的n次方。 解析&#xff1a…...

静态IP代理:网络世界的隐秘通道

在数字化时代&#xff0c;网络安全和隐私保护日益受到重视。静态IP代理作为一种网络服务&#xff0c;为用户提供了一个稳定且可预测的网络连接方式&#xff0c;同时保护了用户的在线身份。本文将从五个方面深入探讨静态IP代理的概念、优势、应用场景、技术实现以及选择时的考量…...

信号和槽的其他说明和优缺点

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、信号与槽的断开 二、使用Lambda 表达式定义槽函数 1、局部变量引入方式 [ ] 2、函数参数 &am…...

手工创建 kamailio database tables

有些场景可能kamdbctl create不好使&#xff0c;可能需要手工创建 kamailio database tables&#xff0c;可参考下面的命令序列&#xff1a; USE mysql # 删除之前创建的用户 SELECT user,host FROM user; DROP USER kamailio%; FLUSH PRIVILEGES; # 删除之前创建的数据库 DROP…...

SpringBoot接收参数的19种方式

https://juejin.cn/post/7343243744479625267?share_token6D3AD82C-0404-47A7-949C-CA71F9BC9583...

Disk Map for Mac,让您的Mac更“轻”松

还在为Mac磁盘空间不足而烦恼吗&#xff1f;Disk Map for Mac来帮您轻松解决&#xff01;通过独特的TreeMap视觉显示技术&#xff0c;让您一眼就能看出哪些文件和文件夹占用了大量空间。只需简单几步操作&#xff0c;即可快速释放磁盘空间&#xff0c;让您的Mac更“轻”松。快来…...

【二叉树】(三)二叉树的基础修改构造及属性求解2

&#xff08;二&#xff09;二叉树的基础修改构造及属性求解2 二叉树的所有路径思路递归法迭代法 左叶子之和递归法迭代法 找树左下角的值递归法迭代法 路径总和从中序与后序遍历序列构造二叉树最大二叉树合并二叉树 二叉树的所有路径 力扣原题链接&#xff1a;257. 二叉树的所…...

PyCharm2024安装教程

PyCharm是一款功能强大的Python集成开发环境&#xff08;IDE&#xff09;&#xff0c;它提供了许多工具和功能来帮助开发者编写、调试和测试Python代码。以下是使用PyCharm的基本步骤&#xff1a; 安装PyCharm&#xff1a;首先&#xff0c;你需要从JetBrains官方网站下载并安装…...

JavaScript基础知识强化:变量提升、作用域逻辑及TDZ的全面解析

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 ⭐️ 引言&#x1f3af; 变量提升(Hoisting)&#x1f47b; 暂时性死区&#xff08;Temporal Dead Zone, TDZ&#xff09;解释&#x1f4e6; var声明&#x1f512; let与const声明&#x1f4d6; 函数声明 与 函数表达式函数声…...

[Cesium]Cesium基础学习——Primitive

Cesium开发高级篇 | 01空间数据可视化之Primitive - 知乎 Primitive由两部分组成&#xff1a;几何体&#xff08;Geometry&#xff09;和外观&#xff08;Appearance&#xff09;。几何体定义了几何类型、位置和颜色&#xff0c;例如三角形、多边形、折线、点、标签等&#xff…...

java相等忽略音调

来自百度,亲测可用 java相等忽略音调 在Java中&#xff0c;如果你想比较两个字符串而忽略它们的音调符号&#xff0c;你可以使用java.text.Collator类来进行区域敏感的字符串比较。Collator类提供了根据特定区域的规则进行字符串比较的能力&#xff0c;可以设置忽略音调的选项…...

自养号测评实战指南:Shopee、Lazada销量翻倍不再是难题

对于速卖通、亚马逊、eBay、敦煌网、SHEIN、Lazada、虾皮等平台的卖家而言&#xff0c;提高店铺流量并转化为实际销量是共同追求的目标。在这个过程中&#xff0c;自养号进行产品测评显得尤为重要。通过精心策划和执行的测评活动&#xff0c;卖家不仅能够显著增加产品的销量&am…...

【Java开发面试系列】JVM相关面试题(精选)

【Java开发面试系列】JVM相关面试题&#xff08;精选&#xff09; 文章目录 【Java开发面试系列】JVM相关面试题&#xff08;精选&#xff09;前言一、JVM组成二、类加载器三、垃圾回收四、JVM实践&#xff08;调优&#xff09; &#x1f308;你好呀&#xff01;我是 山顶风景独…...

解决Win11下SVN状态图标显示不出来

我们正常SVN在Windows资源管理器都是有显示状态图标的&#xff0c; 如果不显示状态图标&#xff0c;可能你的注册表的配置被顶下去了&#xff0c;我们查看一下注册表 运行CMD > regedit 打开注册表编辑器 然后打开这个路径&#xff1a;计算机\HKEY_LOCAL_MACHINE\SOFTWARE…...

代码随想录训练营第四十天 | 343. 整数拆分、96.不同的二叉搜索树

343. 整数拆分 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;动态规划&#xff0c;本题关键在于理解递推公式&#xff01;| LeetCode&#xff1a;343. 整数拆分_哔哩哔哩_bilibili 状态&#xff1a;未通…...

python爬取数据并将数据写入execl表中

文章目录 概要 概要 提示&#xff1a;python爬取数据并将数据写入execl表中&#xff0c;仅供学习使用&#xff0c;代码是很久前的&#xff0c;可能执行不通&#xff0c;自行参考学习。 # -*- coding: utf-8 -*- import datetime # 日期库 import requests # 进行网络请求 im…...

Linux动静态库

Linux动静态库 1.动静态库介绍 在程序翻译的链接阶段&#xff0c;其实就是把一堆.o文件链接在一起形成.exe文件。如果一个程序中需要链接很多个.o文件&#xff0c;那么这些.o文件就需要被打包才方便管理&#xff0c;**库文件本质就是把.o文件打包。**库文件是一种提高开发效率…...

线程与进程___(一)

1、线程 Thread 类创建得线程为前台线程&#xff0c;线程池中的为后台线程&#xff0c;&#xff0c;&#xff0c;Main方法结束后&#xff0c;前台线程仍然运行&#xff0c;直到完成&#xff0c;而后台线程立刻结束。 调用线程时候不会立刻进入 Running 状态&#xff0c; 而是…...

Google IO 2024有哪些看点呢?

有了 24 小时前 OpenAI 用 GPT-4o 带来的炸场之后&#xff0c;今年的 Google I/O 还未开始&#xff0c;似乎就被架在了一个相当尴尬的地位&#xff0c;即使每个人都知道 Google 将发布足够多的新 AI 内容&#xff0c;但有了 GPT-4o 的珠玉在前&#xff0c;即使是 Google 也不得…...

纯血鸿蒙APP实战开发——Navigation页面跳转对象传递案例

介绍 本示例主要介绍在使用Navigation实现页面跳转时&#xff0c;如何在跳转页面得到转入页面传的类对象的方法。实现过程中使用了第三方插件class-transformer&#xff0c;传递对象经过该插件的plainToClass方法转换后可以直接调用对象的方法&#xff0c; 效果图预览 使用说…...

Windows C++ 读取、修改配置文件.ini

目录 一、INI文件基础介绍 二、GetPrivateProfileString和WritePrivateProfileString 解释&#xff1a; 一、INI文件基础介绍 INI文件&#xff08;初始化文件&#xff09;是一种简单的文本文件&#xff0c;用于存储程序的配置设置。它们通常用于Windows操作系统环境中&#x…...

物联网D3——按键控制LED、光敏传感蜂鸣器

按键控制LED 按键抖动&#xff0c;电平发生变化&#xff0c;可用延时函数抵消按键抖动对系统的影响 传感器电路图 按键电路图 c语言对应类型 “_t”后缀表示使用typedef重命名的数据类型 枚举类型 #include<iostream> using namespace std; //定义枚举类型 typedef enu…...

Spring初学入门(跟学笔记)

一、Spring概述 Spring是一款主流的Java EE轻量级开源框架。 Spring的核心模块&#xff1a;IoC&#xff08;控制反转&#xff0c;指把创建对象过程交给Spring管理 &#xff09;、AOP&#xff08;面向切面编程&#xff0c;在不修改源代码的基础上增强代码功能&#xff09; 二、…...

二进制部署k8s---下篇

一 master02 节点部署 1 先在master01 添加映射master02 对master02进行环境初始化 3 从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点 scp -r /opt/etcd/ root192.168.11.12:/opt/ scp -r /opt/kubernetes/ root192.168.11.12:/opt…...

基于Sentinel-1遥感数据的水体提取

本文利用SAR遥感图像进行水体信息的提取&#xff0c;相比光学影像&#xff0c;SAR图像不受天气影响&#xff0c;在应急情况下应用最多&#xff0c;针对水体&#xff0c;在发生洪涝时一般天气都是阴雨天&#xff0c;云较多&#xff0c;光学影像质量较差&#xff0c;基本上都是利…...

C++自定义头文件使用(函数和类)

简单案例需求&#xff1a; 1&#xff0c;计算正方形和三角形的周长——函数 2&#xff0c;模拟不同类型的动物叫声——类 一、创建项目 C空项目 Class_Study 二、创建主函数 在源文件下添加新建项&#xff0c;main.cpp 三、自定义头文件——函数 需求&#xff1a;1&a…...

消息队列选型

一、要解决的问题 1.1 异步 分析&#xff1a; 需要根据场景来判断。若整体链路的逻辑中&#xff0c;某些逻辑是不需要强实时的&#xff0c;滞后一段时间是允许的&#xff0c;同时又不会对用户带来不好的体验&#xff0c;那么可以使用MQ完成异步操作。 例如&#xff1a;秒杀场…...

ubuntu在conda环境中使用 pip install -r requirements.txt但是没有安装在虚拟环境中

whereis pip pip listubuntu在conda环境中使用pip install lpips0.1.3 但是安装在了这里 Requirement already satisfied: lpips0.1.3 in /home/uriky/anaconda3/lib/python3.11/site-packages (0.1.3) 就会出现黄色波浪&#xff0c;未在虚拟环境中安装包 解决办法1&#xff1…...

力扣127.单词接龙讲解

距离上一次刷题已经过去了.........嗯............我数一一下............整整十天&#xff0c;今天再来解一道算法题 由于这段时间准备简历&#xff0c;没咋写博客。。今天回来了&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&…...