【视频讲解】SMOTEBoost、RBBoost和RUSBoost不平衡数据集的集成分类酵母数据集、治癌候选药物|数据分享...

全文链接:https://tecdat.cn/?p=37502

分析师:Zilin Wu

在当今的大数据时代,科研和实际应用中常常面临着海量数据的处理挑战。在本项目中,我们拥有上万条数据,这既是宝贵的资源,也带来了诸多难题。一方面,我们渴望从这庞大的数据海洋中提取出有价值的信息,以推动科学研究和实际应用的发展;另一方面,数据量的庞大容易引发“维数灾难”现象,即随着数据维度的增加,计算复杂度呈指数增长,使得数据分析和处理变得极为困难点击文末“阅读原文”获取完整代码数据)。

相关视频

本研究聚焦于如何在这上万条数据中找到平衡,既提取有价值的数据,又避免“维数灾难”。具体而言,我们的任务是通过对客户提供的药物信息进行分析,选择出可以成为抗乳腺癌的候选药物。通过对数据源进行预处理、建模以及选择合适的分类模型等一系列科学严谨的方法,我们致力于解决这一复杂的问题,为药物研发和医疗领域的发展贡献力量。 

该项目具有上万条数据,如何从这上万条数据中既提取有价值的数据,又减少数据量避免“维数灾难”的现象成为本项目需要重点解决的问题之一。

解决方案

任务/目标

本研究希望通过提供的药物信息选择出可以成为抗乳腺癌的候选药物。

数据源预处理

客户提供了 1974 个化合物的 729 个分子描述符信息,通过对表格数据的初 步分析,我们发现其中有大量的“0”数据。若某一分子描述符对所有的化合物 的参数均为 0,我们可以认为该分子描述符对化合物的生物活性没有影响,该列 数据予以清除;若某一分子描述符的参数含 0 比率大于 80%,我们可以认为该分 子描述符对化合物的生物活性影响较小,可忽略不计,该列数据予以清除。

通过给出的数据分类,初步判断数据之间具有多重共线性,通过 SPSS 软件对样本数据源进行逐步回归法(Stepwise Regression),得到各分子描述符的 容差和 VIF 值,通过文献阅读,发现当 Tolerance(容差)小于 0.2 或 VIF(方差膨 胀因子)大于 10,可以说明自变量具有高度的共线性,可以使用 Spearman 相关系数。

建模

问题 1:根据 1974 个化合物对 ERα 的活性值以及上述 1974 个化 合物的 729 个分子描述符信息数据,对 729 个分子描述符进行变量选择,按照变 量对生物活性的影响的重要程度进行排序,最终得出对生物活性最具有显著影响 的前 20 个分子描述符。

最为常用的求解相关系数的方法有两种:Pearson 相关系数和 Spearman 等级 相关系数,我们根据数据的不同特征,选择合适的相关系数来表示变量之间的相 关性大小。

Pearson 相关系数的适用范围:(1)两个变量之间应该为线性关系,而且两个变量的数据都应该是连续的;(2)两个变量的总体为正态分布,或者为接近于正态分布的单峰分布;(3)两个变量的观测值是相匹配的,且每一对观测值之间应该保持独立。若以上任一条件不满足,就不能用 Pearson 相关系数来衡量它们之间的相关 性大小。

由于本项目随机变量不服从正态分布,所以选择使用 Spearman 等级相关系数。

用 MATLAB 计算得到分子描述符与 pIC50 的相关系数,进行相关系数排序, 筛选得到前 20 个对生物活性最具有显著影响的分子描述符,如表所示:

f5596658a90970421f1aec324e4358ef.png

问题 2:结合问题 1 的结果,选择不超过 20 个分子描述符变量,建立化合 物对 ERα 生物活性的定量预测模型,并使用该模型预测 50 个化合物的 IC50 值 和对应的 pIC50 值,将预测结果填入相对应的表格中。

需要以化合物的 729 个分子描述符为变量,依据附件中提供的 1924 个 化合物的 ADMET 数据,分别构建化合物 ADMET 性质的 5 个分类预测模型。首先在变量选择的问题上,729 分子描述符作为变量会使模型的构建过于复杂, 应去除对化合物性质影响较小的变量,于是结合问题 1 得到的结果,最终选择对 生物活性有显著影响的前 287 个分子描述符作为变量。其次在分类模型的选择 上,我们使用 Matlab 编程,选出对模型分类准确率较高的 SVM 支持向量机模型。然后经过大量的文献阅读,发现当样本数据存在不平衡问题时不能将分类准确率 作为唯一指标,还需看少数样本分类的正确率。于是我们考虑使用 RUSBoost 算 法对样本数据不平衡的性质进行分类。最终我们用 SVM 支持向量机对 Caco-2、 hERG 进行分类预测,用 RUSBoost 算法对 CYP3A4、HOB、MN 进行分类预测。

问题分析流程图如下:

3890a373279da34a74ff16b3e09b23ed.png

分类模型的选择

我们初步选择了 Matlab 中若干个分类模型进行预测,将模型预测分类值与 真实分类值进行对比,计算这些模型的分类准确率,筛选出分类准确率较高的前 三个模型,结果如图所示

6f4f90c5de95b4285da437ffbe38bac7.png

准确率大小比较:Quadratic SVM(91.8%)>Boosted Trees(91.4%)>Bagged Trees(91.2%)。接下来我们以 AUC 为指标进行进一步的模型选择。AUC 结果如 图所示:

dd0683cc128f5ef578bdb74283144093.png

从图中可以看出,SVM 支持向量机的 AUC 指标最高,为 0.971。综合准确率和 AUC 两个指标,得出 SVM 支持向量机分类预测较为准确。基于以上结果,我们选择 SVM 支持向量机进行分类预测。

模型调参

在调参中,我们通过不断调整最大分裂数和决策树个数来找到效果最好的模 型。接下来我们以对 HOB 性质进行分类的模型调参为例。通过 Matlab 计算出不 同参数组合下模型的预测准确率,并将数据进行可视化处理,结果如表所示:

180d72b4ac57c04d73837a44b6d702f1.png

调参前,(最大分裂数,决策树)=(20,30),由以上表格可以看出,此 时模型的 AUC 值为 91.77%。当(最大分裂数,决策树)=(50,50)时,模型 的 AUC 值达到了 93.05%,提高了 1.28 个百分比。所以我们最终选择(最大分 裂数,决策树)=(50,50)的参数组合,以提高模型的分类效果。


点击标题查阅往期内容

db96d1b1e9678ae3478a0a385f5257e0.png

PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯和KMEANS聚类用户画像

outside_default.png

左右滑动查看更多

outside_default.png

01

24d5c6826ccd8366ad21663d83b2b33c.png

02

8996b58fac4a8f659ded7240038a5404.png

03

18481f3a765194c35d3d09ae7a0ae271.png

04

06b5c6aa0ce85838f7fb8fde9a650f75.png

项目结果

使用支持向量机对候选药物的安全性进行分类,确保候选药物对人体无害。

cf497f6db1a25483364841d979ae08ef.png

Python用SMOTEBoost、RB-Boost 和 RUS-Boost不平衡数据集的集成分类器分析酵母数据集|附数据代码

当分类类别不能近似等比例表示时,数据集是不平衡的。数据采样技术试图通过调整训练数据集的类别分布来缓解类别不平衡问题。这可以通过从多数类中移除示例(欠采样)或向少数类中添加示例(过采样)来实现。本研究在两类不平衡数据集上实现了 SMOTEBoost、RB-Boost 和 RUS-Boost 三种构建分类器集成的方法,并报告了它们在 5 折不平衡酵母数据集查看文末了解数据免费获取方式上的性能指标和 ROC 曲线,同时将结果与支持向量机(SVM)分类器、AdaBoost-M2 和随机森林集成进行了比较。

在现实世界的许多应用中,数据集往往存在类别不平衡的问题。这给分类任务带来了挑战,因为传统的分类算法通常假设各类别样本数量大致相等。为了解决这个问题,研究人员提出了各种方法,其中包括数据采样技术和集成学习方法。

相关技术

数据采样技术

  1. 欠采样:从多数类中移除示例,以减少多数类的样本数量,使其与少数类的样本数量更加接近。

  2. 过采样:向少数类中添加示例,以增加少数类的样本数量。其中,合成少数过采样技术(SMOTE)通过在特征空间中创建 “合成” 示例来对少数类进行过采样。具体方法是:取当前考虑的特征向量(样本)与其最近邻之间的差值,将该差值乘以一个 0 到 1 之间的随机数,然后将其添加到当前考虑的特征向量中。这样可以在两个特定特征之间的线段上选择一个随机点,有效地使少数类的决策区域变得更加通用。根据参考文献 [1],本实现使用五个最近邻。

集成学习方法

  1. SMOTEBoost 算法:结合了合成少数过采样技术(SMOTE)和标准提升过程。在每次迭代中,仅对分布 D 中的少数类示例进行 SMOTE,新创建的合成少数类示例在学习分类器后被丢弃,不在原始训练集中添加。

  2. Ada-Boost M2:定义了一种更复杂的误差,称为伪损失。伪损失是相对于所有示例和错误标签对的集合上的分布计算的,而普通误差是相对于示例上的分布计算的。

  3. Random Balancex:在集成中使用该技术可以增加多样性并处理不平衡问题。对于给定的数据集,为集成中的每个成员获得一个相同大小但不平衡比例随机选择的不同数据集。使用 SMOTE 和随机欠采样分别增加或减少类的大小以匹配所需的大小。

  4. RB-Boost:在每次迭代中,根据 Random Balancex 函数生成数据集 S´t,更新分布 D´t,为原始数据集中的每个实例维护其关联的权重,并为合成示例分配均匀权重 1/m。然后使用 S´t 和 D´t 训练一个弱学习算法(此处为最大深度为 3 的决策树),该分类器将为每个类给出 0 到 1 之间的概率。计算弱分类器的伪损失 ϵ´t,并更新分布 D,使与错误分类相关的权重高于正确分类的权重。

  5. RUSBoost:也是 AdaBoost-M2 的一种修改,在每次迭代中使用随机欠采样从多数类中移除实例,直到达到所需的类分布。与 SMOTE 相比,RUSBoost 具有算法复杂度低和训练时间短的优点。

使用 5 折交叉验证的不平衡酵母数据集。

加载数据集:使用glob模块加载训练集和测试集文件,并将其存储在列表中。

traFiles = sorted(glob.')) X_train = \[\]

c535da31746d2bb16da74580d57d7fee.png

  1. 分类函数:定义一个用于训练、评估和计算指标的函数classify,该函数接受一个模型和分类器名称作为参数,并返回准确率、精确率和召回率。

def classify(model, classifier\_name):acc = precision = recall = 0for i in range(kFold):# 训练model.fit(X\_train\[i\], Y_train\[i\])

SVM

  • 支持向量机(SVM):使用线性核函数和参数 C = 1 的 SVC 模型。

model = SVC(kernel ='linear', C = 1, probability=True)acc\_svm, precision\_svm, recall_svm = classify(model, "SVM")
``````

3d70dbef4a922b6d502a700ef2e366c9.png

  • 随机森林:分别实现了不同参数设置的随机森林分类器,包括 n\_estimators = 10、50、100,max\_depth = 2。

L = 10
model = RandomForestClassifier(n\_estimators=10, max\_depth=2)acc\_RF\_L10, precision\_RF\_L10, recall\_RF\_L10 = classify(model, "Random Forest L10")

b3e0eb990514c603617801ff28d5b485.png 

3fc5a48d32a3c88f5f0e713994f6b82b.png

L = 50
model = RandomForestClassifier(n\_estimators=50, max\_depth=2)acc\_RF\_L50, precision\_RF\_L50, recall\_RF\_L50 = classify(model, "Random Forest L50")

3deffe72762a0b89f2c3dc8963a842c8.png 

e8f466318290b6bfdaf66f917ed6659c.png

L = 100
model = RandomForestClassifier(n\_estimators=100, max\_depth=2)acc\_RF\_L100, precision\_RF\_L100, recall\_RF\_L100 = classify(model, "Random Forest L100")
``````
Random Forest L100 Accuracy: 0.91
Random Forest L100 Precision: 0.75
Random Forest L100 Recall: 0.53

8ad5176db7bc6f31b0589e46142db2f7.png

  • SMOTE:实现了 SMOTE 算法,用于过采样少数类。

def smote(minority\_x, N, k):T = len(minority\_x)
  • SMOTEBoost:实现了 SMOTEBoost 算法。

a4a12d07e1ab44f5196025565a80e06d.png 

7c1776111762523588a8449fccc2c0c9.png 

8a636513425080da434c243fb4de4842.png 

4feddfef7157d947c32fe2034631fa71.png 

ae3ca51bd4233ac48fe7406bee62ab6a.png 

d8cb45e5addbf05f1257d47c7f200022.png

  • AdaBoostM2:实现了 AdaBoost-M2 算法。

def AdaBoostM2(X, Y, n\_estimators):classifier\_list = \[\]beta_list = \[\]D = np.ones(len(X), dtype=np.float64)D\[:\] = 1. / len(X)

8ed8e73e57c62dfd8b0fba34a2d75353.png

3311477091e16df4174f54fc769ac4b1.png

1573f74eec33f7f928506167ca45934f.png

b7eba65ee3061e1d6a4377347924cc00.png

25b067a9d7f0400c2185ddd2cbfa4c94.png

6e54f1a21ed3fd4382d8284e35ceabd5.png

  • Random Balancex:实现了 Random Balancex 技术。

def Random\_Balancex(X, Y, minority\_class):minority\_x = \[X\[i\] for i in range(len(X)) if Y\[i\] == minority\_class\]majority\_x = \[X\[i\] for i in range(len(X)) if Y\[i\] != minority\_class\]total\_size = len(X)minority\_size = len(minority\_x)majority\_size = len(majority_x)
  • RB-Boost:实现了 RB-Boost 算法。

def RBBoost(X, Y, minority\_class, n\_estimators):classifier_list = \[\]
  • RUSBoost:实现了 RUSBoost 算法。

34c9a9937260ef6779414c1cd8d70616.png

结果与分析

(一)准确率

将不同分类器在不同参数设置下的准确率进行比较,结果显示随机森林 L100 的准确率为 0.91。

groups = 3data = \[\[acc\_smoteBoost\_L10, acc\_smoteBoost\_L50, acc\_smoteBoost\_L100\],\[acc\_adaBoostM2\_L10, acc\_adaBoostM2\_L50, acc\_adaBoostM2\_L100\],\[acc\_rbBoost\_L10, acc\_rbBoost\_L50, acc\_rbBoost\_L100\],\[acc\_rusBoost\_L10, acc\_rusBoost\_L50, acc\_rusBoost\_L100\],\[acc\_RF\_L10, acc\_RF\_L50, acc\_RF\_L100\],\]X = np.arange(1, groups*2, step=2)fig = plt.figure()ax = fig.add_axes(\[0,0,1,1\])

3325ac6dfc775c0a88792943e3a294e6.png

(二)精确率

比较不同分类器的精确率。

groups = 3data = \[\[precision\_smoteBoost\_L10, precision\_smoteBoost\_L50, precision\_smoteBoost\_L100\],\[precision\_adaBoostM2\_L10, precision\_adaBoostM2\_L50, precision\_adaBoostM2\_L100\],\[precision\_rbBoost\_L10, precision\_rbBoost\_L50, precision\_rbBoost\_L100\],\[precision\_rusBoost\_L10, precision\_rusBoost\_L50, precision\_rusBoost\_L100\],

72a3dec692c0e85fce21db4ee05edf75.png

(三)召回率

比较不同分类器的召回率。

groups = 3data = \[\[recall\_smoteBoost\_L10, recall\_smoteBoost\_L50, recall\_smoteBoost\_L100\],\[recall\_adaBoostM2\_L10, recall\_adaBoostM2\_L50, recall\_adaBoostM2\_L100\],\[recall\_rbBoost\_L10, recall\_rbBoost\_L50, recall\_rbBoost\_L100\],

fb88bbe6c564a63bc44758189092de80.png

结论

本研究实现了多种用于不平衡数据集的分类器集成方法,并在不平衡酵母数据集上进行了实验。通过比较不同分类器的性能指标和可视化结果,可以得出不同方法在处理不平衡数据集上的优缺点。未来的研究可以进一步探索更有效的不平衡数据集处理方法,以及在不同应用场景下的性能表现。

参考文献

[1] Chawla, Nitesh V., et al. "SMOTE: synthetic minority over-sampling technique." Journal of artificial intelligence research 16 (2002): 321-357.

[2] Chawla, Nitesh V., et al. "SMOTEBoost: Improving prediction of the minority class in boosting." European conference on principles of data mining and knowledge discovery. Springer, Berlin, Heidelberg, 2003.

[3] Freund, Yoav, and Robert E. Schapire. "Experiments with a new boosting algorithm." icml. Vol. 96. 1996.

[4] Díez-Pastor, José F., et al. "Random balance: ensembles of variable priors classifiers for imbalanced data." Knowledge-Based Systems 85 (2015): 96-111.

[5] Seiffert, Chris, et al. "RUSBoost: A hybrid approach to alleviating class imbalance." IEEE Transactions on Systems, Man, and Cybernetics-Part A: Systems and Humans 40.1 (2009): 185-197.

关于分析师

32317b9c50eff0a070b908d26a738b91.png

在此对Zilin Wu对本文所作的贡献表示诚挚感谢,他完成了管理科学与工程专业的硕士学位,专注机器学习、数据采集等领域。擅长 Matlab、Sql、Python、Spss 等。

数据获取

在公众号后台回复“酵母数”,可免费获取完整数据。


资料获取

在公众号后台回复“领资料”,可免费获取数据分析、机器学习、深度学习等学习资料。

d52339723de46cbca003edfd18574d3b.jpeg

点击文末“阅读原文”

获取全文完整代码数据资料。

本文选自《SMOTEBoost、RBBoost 和 RUSBoost不平衡数据集的集成分类分析酵母数据集、治癌候选药物筛选》。

点击标题查阅往期内容

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析

PYTHON集成机器学习:用ADABOOST、决策树、逻辑回归集成模型分类和回归和网格搜索超参数优化

R语言集成模型:提升树boosting、随机森林、约束最小二乘法加权平均模型融合分析时间序列数据

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析

R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化

R语言基于树的方法:决策树,随机森林,Bagging,增强树

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测

spss modeler用决策树神经网络预测ST的股票

R语言中使用线性模型、回归决策树自动组合特征因子水平

R语言中自编基尼系数的CART回归决策树的实现

R语言用rle,svm和rpart决策树进行时间序列预测

python在Scikit-learn中用决策树和随机森林预测NBA获胜者

python中使用scikit-learn和pandas决策树进行iris鸢尾花数据分类建模和交叉验证

R语言里的非线性模型:多项式回归、局部样条、平滑样条、 广义相加模型GAM分析

R语言用标准最小二乘OLS,广义相加模型GAM ,样条函数进行逻辑回归LOGISTIC分类

R语言ISLR工资数据进行多项式回归和样条回归分析

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型

R语言用泊松Poisson回归、GAM样条曲线模型预测骑自行车者的数量

R语言分位数回归、GAM样条曲线、指数平滑和SARIMA对电力负荷时间序列预测

R语言样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化

如何用R语言在机器学习中建立集成模型?

R语言ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测

在python 深度学习Keras中计算神经网络集成模型

R语言ARIMA集成模型预测时间序列分析

R语言基于Bagging分类的逻辑回归(Logistic Regression)、决策树、森林分析心脏病患者

R语言基于树的方法:决策树,随机森林,Bagging,增强树

R语言基于Bootstrap的线性回归预测置信区间估计方法

R语言使用bootstrap和增量法计算广义线性模型(GLM)预测置信区间

R语言样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析

R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析

R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化

Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线

matlab使用分位数随机森林(QRF)回归树检测异常值

dbb32218274d8fd43f3be54249091005.jpeg

1f890b27f57d0a8ddedefcbb22da436c.png

9158da1c38835f95ea0670b745f6a1b6.png

d594a846004f43571b352639be0bb57d.jpeg

d5ed5ee3d8050bfdfbfd365a3c1aa937.png

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

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

相关文章

【递归回溯之floodfill算法专题练习】

1. 图像渲染 class Solution {int dx[4] {0, 0, -1, 1};int dy[4] {1, -1, 0, 0};int m, n;int oldcolor; public:vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {oldcolor image[sr][sc]; // 保存原…

MySQL数据库MVCC机制底层原理详解

mvcc机制即多版本并发控制 当在事务中使用了写操作&#xff08;增删改&#xff09;语句时会给当前事务生成一个事务id&#xff0c;事务id是递增的 同时&#xff0c;对于被修改的行的数据会创建一个数据版本 &#xff0c;这个数据版本除了包含原有的字段还会包含一个事务id和一…

Linux驱动开发—创建总线,创建属性文件

文章目录 1.什么是BUS&#xff1f;1.1总线的主要概念1.2总线的操作1.3总线的实现 2.创建总线关键结构体解析2.1注册总线到系统2.2 struct bus_type *bus 解析 3.实验结果分析1. devices 目录2. drivers 目录3. drivers_autoprobe 文件4. drivers_probe 文件5. uevent 文件 4.在…

【力扣】划分为k个相等的子集

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 给定一个整数数组 …

【qt】锁

线程安全问题. 多线程程序太复杂了. 加锁 把多个线程要访问的公共资源&#xff0c;通过锁保护起来.>把并发执行变成串行执行. Linux mutex 互斥量. C11引入std::mutex Qt 同样也提供了对应的锁&#xff0c;来针对系统提供的锁进行封装.QMutex 多个线程进行加锁的对象&…

【生日视频制作】室内告白表白祝福布置霓虹灯AE模板修改文字软件生成器教程特效素材【AE模板】

室内告白表白祝福布置霓虹灯生日视频制作教程AE模板改字生成器 怎么如何做的【生日视频制作】室内告白表白祝福布置霓虹灯AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频

Signac R|如何合并多个 Seurat 对象 (1)

引言 在本文中演示了如何合并包含单细胞染色质数据的多个 Seurat 对象。为了进行演示&#xff0c;将使用 10x Genomics 提供的四个 scATAC-seq PBMC 数据集&#xff1a; 500-cell PBMC 1k-cell PBMC 5k-cell PBMC 10k-cell PBMC 实战 在整合多个单细胞染色质数据集的过程中&…

SAP与生产制造MPM系统集成案例

一、需求介绍 某公司为保证企业内部生产管理系统的多项基础数据的同步更新&#xff0c;确保各模块间信息的一致性和准确性&#xff0c;对后续的生产计划和物料管理打下基础&#xff0c;该公司将MPM系统和SAP系统经过SAP PO中间件集成平台进行了集成。MPM全称为Manufacturing…

超实用的8个无版权、免费、高清图片素材网站整理

不管是设计、文章配图&#xff0c;还是视频制作&#xff0c;图片都至关重要。但是图片版权一直都是困扰很多设计、自媒体以及企业的大问题。现在&#xff0c;因为图片侵权被告的案例已经是司空见惯了&#xff0c;有的公众号甚至因为图片版权问题遭受致命打击。 1. Pexels Pexe…

Spring框架:开发者的得力伙伴,魅力何在?

目录 一. Spring介绍 二. Spring搭建 三. Spring Bean管理 ▐ 管理方式 ▐ 依赖注入 四. Spring数据访问层管理 五. Spring集成MyBatis 海漫浩浩,我亦苦作舟!大家一起学习,一起进步! 一. Spring介绍 Spring是什么? Spring 是一个轻量级的, IOC 和 AOP 的一站式 J…

如何使用ssm实现基于java web的计算机office课程平台设计与实现+vue

TOC ssm277基于java web的计算机office课程平台设计与实现vue 绪论 1.1 研究背景 现在大家正处于互联网加的时代&#xff0c;这个时代它就是一个信息内容无比丰富&#xff0c;信息处理与管理变得越加高效的网络化的时代&#xff0c;这个时代让大家的生活不仅变得更加地便利…

博弈论(Nim游戏的扩展)

公平组合游戏ICG 若一个游戏满足: 1.由两名玩家交替行动; 2.在游戏进程的任意时刻&#xff0c;可以执行的合法行动与轮到哪名玩家无关; 3.不能行动的玩家判负; 则称该游戏为一个公平组合游戏。 NIM博弈属于公平组合游戏&#xff0c;但城建的棋类游戏&#xff0c;比如围棋&…

大刀阔斧改革之后,阅文距离“东方迪士尼”更近了吗?

当前&#xff0c;网文IP的确是“富矿”。中国社会科学院文学研究所发布的《2023中国网络文学发展研究报告》显示&#xff0c;截至2023年底&#xff0c;网络文学IP市场规模2605亿元&#xff0c;同比增长近百亿元。 近日&#xff0c;网文产业中的头部企业阅文集团也披露数据称&a…

虚拟内存和linux(操作系统part1)

一个操作系统的虚拟内存和linux部分知识点的笔记整理&#xff0c;资料大多参考于&#xff1a;小林coding和Javaguide。 虚拟内存的作用 第一&#xff0c;虚拟内存可以使得进程运行内存超过物理内存大小&#xff0c;因为程序运行符合局部性原理&#xff0c;CPU 访问内存会有很…

【iOS安全】iPhone8 iOS14.4.2 越狱教程

环境配置 iPhone 8&#xff1a; 固件版本 iOS 14.4.2 (18D70) 产品类型 iPhone10,1 (A1906) 销售型号 MQ862J/A MacBook Pro&#xff1a; macOS 10.15.7 装有CheckRa1n beta 0.12.4 概述 尝试了几个版本的unc0ver和Taurine&#xff0c;发现都不好使 unc0ver显示unsupported…

95.SAP MII功能详解(08)Workbench-Transaction介绍

目录 1.Transaction 2.Properties of transaction 1.Transaction You use transactions to access data from multiple sources and execute processes, which are triggered synchronously or asynchronously.您可以使用事务从多个源访问数据并执行同步或异步触发的流程。…

代码随想录——两个字符串的删除操作(Leetcode 583)

题目链接 动态规划 思路&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j]&#xff1a;以i-1为结尾的字符串word1&#xff0c;和以j-1位结尾的字符串word2&#xff0c;想要达到相等&#xff0c;所需要删除元素的最少次数。 确定递推公式 当…

PD取电快充协议方案

PD快充协议是通过调整电压和电流来提供不同的充电功率。它采用了一种基于USB-C端口的通信协议&#xff0c;实现了充电器于设备之间的信息交换。在充电过程中设备会向充电器发出请求&#xff0c;要求提供不同的电压和电流&#xff0c;充电器接收到请求后&#xff0c;会根据设备的…

cordova手动更新

1&#xff1a;依赖 cordova-plugin-file cordova-plugin-file-transfer cordova-plugin-file-opener2 第二个参数&#xff1a;application/vnd.android.package-archive来源 cordova plugin add cordova-plugin-app-version//获取cordova版本号 cordova plugin add cordova-p…

Python | Leetcode Python题解之第375题猜数字大小II

题目&#xff1a; 题解&#xff1a; class Solution:def getMoneyAmount(self, n: int) -> int:f [[0] * (n 1) for _ in range(n 1)]for i in range(n - 1, 0, -1):for j in range(i 1, n 1):f[i][j] j f[i][j - 1]for k in range (i, j):f[i][j] min(f[i][j], k …