基于无监督学习-关联规则的风险评估模型:更精准的预测!

news2024/11/18 5:33:59

一、引言

乳腺癌被认为是全球最常见的女性恶性肿瘤之一,对患者和公共健康造成了巨大的负担。准确评估乳腺癌风险是预防、诊断和治疗该疾病的关键。然而,乳腺癌风险估计面临着一些挑战,如数据的限制性、模型的复杂性和准确性等。因此,发展一种准确且高效的乳腺癌风险评估方法具有重要意义。

本研究旨在探索无监督学习和关联规则的潜力,以改进乳腺癌风险评估方法。无监督学习在无需标记的数据集中识别潜在模式方面具有优势,而关联规则分析则可发现变量之间的关联和依赖关系[1]。基于这些方法,我们提出了一种新的乳腺癌风险评估模型。该模型可以从大规模数据集中挖掘隐藏的关联规则和特征,为个体提供个性化的风险评估结果。

二、无监督学习关联规则概述

2.1 无监督学习的基本概念和原理

无监督学习是一种机器学习方法,其目标是从未标记的数据中发现模式、结构和相似性,而无需预先定义的目标变量。相对于监督学习需要使用标记的数据进行训练,无监督学习更加灵活,适用于探索数据中的隐藏结构和关联关系。

在无监督学习中,常见的方法包括聚类、降维和异常检测。聚类算法根据数据点之间的相似性将它们分组到不同的类别中,从而帮助发现数据中的无标签模式。降维技术可以将高维数据映射到较低维的子空间,以帮助可视化和理解数据。异常检测则用于识别与正常模式不符的异常数据点。

2.2 关联规则挖掘及其在数据挖掘中的应用

关联规则挖掘是数据挖掘领域中的一项重要任务,用于发现数据集中项目之间的关联和依赖关系。关联规则通常采用"If-Then"的形式,例如"If A, Then B",它描述了两个或多个项目之间的关系。关联规则挖掘不仅仅可以应用于市场篮子分析、产品推荐和销售策略优化等领域,还具有在乳腺癌风险评估中发现相关特征的潜力。

关联规则挖掘的主要步骤包括支持度和置信度的计算、规则生成和规则评估。支持度衡量了规则在数据集中出现的频率,而置信度度量了规则的可靠性。通过设置支持度和置信度的阈值,可以选择出具有较高支持度和置信度的关联规则。这些规则可以帮助我们发现数据中的潜在关联和规律,为进一步的分析和决策提供有价值的信息。

通过结合无监督学习和关联规则挖掘,我们可以利用无监督学习来识别数据中的模式和结构,然后使用关联规则挖掘技术来揭示关联关系和依赖关系。这种整合的方法在乳腺癌风险评估中具有潜力,可以从大规模的数据集中提取有关乳腺癌风险因素的重要见解。

三、基于关联规则的风险评估

3.1 模型的核心思想和基本步骤

我们提出了一种基于关联规则的乳腺癌风险评估模型,旨在从大规模数据集中挖掘相关特征和风险因素,为个体提供个性化的风险评估结果。

该模型的核心思想是通过关联规则挖掘技术来发现患者基本特征和可能的乳腺癌相关因素之间的关联关系。这些关联规则将根据实际数据集中的支持度和置信度进行筛选,以保证规则的有效性和可靠性。

「模型的基本步骤包括」

  • 「数据收集和预处理」:从实际数据源中收集乳腺癌相关的患者数据,并对数据进行预处理,例如清洗、去除缺失值和异常值等,以确保数据的质量和一致性。
  • 「特征选择」:在数据预处理后,我们需要进行特征选择以减少数据维度并提高模型的效果。常用的特征选择方法包括相关性分析、信息增益和卡方检验等。
  • 「关联规则挖掘」:选择适当的关联规则挖掘算法,例如Apriori算法或FP-growth算法,来挖掘数据中的潜在关联关系。通过设置支持度和置信度的阈值,筛选出具有高支持度和置信度的关联规则。
  • 「风险评估和结果生成」:根据患者的个人特征和关联规则,计算其乳腺癌风险评估值,并生成相应的风险评估结果。这些结果可以帮助医生和患者更好地了解个体的乳腺癌风险,并为预防、早期检测和治疗提供指导。

另外这是一个半监督学习的分析流程图,可供参考!

3.2 数据预处理和特征选择的方法

在模型中,数据预处理是一个关键步骤,它确保数据的可靠性和一致性。预处理过程中,我们会清洗数据,去除不完整或有缺失值的记录,并处理异常值。

对于特征选择,我们可以使用多种方法来选取最相关的特征,以降低数据维度和提高模型性能。常见的方法包括相关性分析、信息增益和卡方检验等。这些方法可以衡量特征与乳腺癌之间的相关性,从而选择对乳腺癌风险评估最为重要的特征。

3.3 关联规则挖掘算法的选择和参数调整

在关联规则挖掘阶段,我们需要选择适当的算法来挖掘数据中的关联关系。一种常用的算法是Apriori算法,它基于频繁项集来生成关联规则。另一种算法是FP-growth算法,它使用树状结构来挖掘频繁项集和关联规则,相比Apriori算法具有更高的效率。

参数调整是关联规则挖掘的重要一步,可以通过设置支持度和置信度的阈值来控制关联规则的数量和质量。较高的支持度阈值可以过滤掉一些不常见的规则,而较高的置信度阈值可以保证关联规则的可靠性。通过合理设定这些参数,我们可以得到具有较高支持度和置信度的关联规则,从而提高模型的准确性和可解释性。

在模型的开发过程中,我们需要对算法进行参数调优和模型训练。这意味着我们需要对关联规则挖掘算法的参数进行调整,以最大限度地发现数据中的有意义的关联规则。常见的参数包括支持度阈值和置信度阈值,通过调整这些参数,我们可以获得适合当前数据集和问题的最佳关联规则。

需要注意的是,模型的表现和效果取决于数据的质量和特征的选取。因此,我们应该注意数据预处理的准确性和特征选择的有效性,以获得更好的乳腺癌风险评估结果。

四、实用案例分析

步骤一:数据载入和解释

library(survival)
str(gbsg)

结果展示:

'data.frame':   686 obs. of  10 variables:
 $ age    : int  49 55 56 45 65 48 48 37 67 45 ...
 $ meno   : int  0 1 1 0 1 0 0 0 1 0 ...
 $ size   : int  18 20 40 25 30 52 21 20 20 30 ...
 $ grade  : int  2 3 3 3 2 2 3 2 2 2 ...
 $ nodes  : int  2 16 3 1 5 11 8 9 1 1 ...
 $ pgr    : int  0 0 0 0 0 0 0 0 0 0 ...
 $ er     : int  0 0 0 4 36 0 0 0 0 0 ...
 $ hormon : int  0 0 0 0 1 0 0 1 1 0 ...
 $ rfstime: int  1838 403 1603 177 1855 842 293 42 564 1093 ...
 $ status : Factor w/ 2 levels "0","1": 1 2 1 1 1 2 2 1 2 2 ...

age:患者年龄
meno:更年期状态(0表示未更年期,1表示已更年期)
size:肿瘤大小
grade:肿瘤分级
nodes:受累淋巴结数量
pgr:孕激素受体表达水平
er:雌激素受体表达水平
hormon:激素治疗(0表示否,1表示是)
rfstime:复发或死亡时间(以天为单位)
status:事件状态(0表示被截尾,1表示事件发生)

步骤二:数据预处理和特征选择

我们本片文章的主要目的是演示无监督学习的关联规则,这里不对特征选择进行演示,如果有需要知道如何进行相关性检验和卡方检验的可以关注和私信我,我们一起讨论学习。

# 特征选择(这里可以t检验的结果进行特征选择)
selected_features <- c("age""meno""size""grade","pgr","er","hormon")
gbsg_select <- gbsg[,selected_features]

结果展示:

# > head(gbsg_select)
  age meno size grade pgr er hormon
1  49    0   18     2   0  0      0
2  55    1   20     3   0  0      0
3  56    1   40     3   0  0      0
4  45    0   25     3   0  4      0
5  65    1   30     2   0 36      1
6  48    0   52     2   0  0      0

正常的情况下是要根据卡方检验和相关性分析结果进行特征选择的,这里是为了更加突出无监督学习,不予展示!

步骤三:无监督学习-关联规则

# 安装并加载arules包
install.packages("arules")
library(arules)

# 将gbsg数据集转换为适合关联规则分析的数据格式
gbsg_trans <- as(gbsg_select, "transactions")

# 使用Apriori算法发现关联规则
rules <- apriori(gbsg_trans, parameter = list(support = 0.1, confidence = 0.7))
# 查看发现的关联规则
inspect(rules)

结果展示:

      lhs                                                                   rhs                  support   confidence coverage  lift      count
[1]   {}                                                                 => {grade=[2,3]}        0.8819242 0.8819242  1.0000000 1.0000000 605  
[2]   {}                                                                 => {hormon=[0,1]}       1.0000000 1.0000000  1.0000000 1.0000000 686  
[3]   {}                                                                 => {meno=[0,1]}         1.0000000 1.0000000  1.0000000 1.0000000 686  
[4]   {grade=[1,2)}                                                      => {hormon=[0,1]}       0.1180758 1.0000000  0.1180758 1.0000000  81  
[5]   {grade=[1,2)}                                                      => {meno=[0,1]}         0.1180758 1.0000000  0.1180758 1.0000000  81  
[6]   {size=[22,30)}                                                     => {grade=[2,3]}        0.2463557 0.8894737  0.2769679 1.0085602 169  
[7]   {size=[22,30)}                                                     => {hormon=[0,1]}       0.2769679 1.0000000  0.2769679 1.0000000 190  
[8]   {size=[22,30)}                                                     => {meno=[0,1]}         0.2769679 1.0000000  0.2769679 1.0000000 190  
[9]   {size=[3,22)}                                                      => {grade=[2,3]}        0.2594752 0.8516746  0.3046647 0.9657005 178  
[10]  {size=[3,22)}                                                      => {hormon=[0,1]}       0.3046647 1.0000000  0.3046647 1.0000000 209  
[11]  {size=[3,22)}                                                      => {meno=[0,1]}         0.3046647 1.0000000  0.3046647 1.0000000 209  
[12]  {age=[21,48)}                                                      => {grade=[2,3]}        0.2842566 0.8986175  0.3163265 1.0189283 195  
[13]  {age=[21,48)}                                                      => {hormon=[0,1]}       0.3163265 1.0000000  0.3163265 1.0000000 217  
[14]  {age=[21,48)}                                                      => {meno=[0,1]}         0.3163265 1.0000000  0.3163265 1.0000000 217  
[15]  {pgr=[0,13)}                                                       => {er=[0,14)}          0.2303207 0.7022222  0.3279883 2.1315241 158  
[16]  {pgr=[0,13)}                                                       => {grade=[2,3]}        0.3236152 0.9866667  0.3279883 1.1187658 222  
[17]  {pgr=[0,13)}                                                       => {hormon=[0,1]}       0.3279883 1.0000000  0.3279883 1.0000000 225  
[18]  {pgr=[0,13)}                                                       => {meno=[0,1]}         0.3279883 1.0000000  0.3279883 1.0000000 225  
[19]  {er=[0,14)}                                                        => {grade=[2,3]}        0.3206997 0.9734513  0.3294461 1.1037812 220  
[20]  {er=[0,14)}                                                        => {hormon=[0,1]}       0.3294461 1.0000000  0.3294461 1.0000000 226  
[21]  {er=[0,14)}                                                        => {meno=[0,1]}         0.3294461 1.0000000  0.3294461 1.0000000 226
...

步骤四:规则可视化

install.packages("arulesViz")
library(arulesViz)

# 绘制关联规则的网络图
plot(rules, method = "graph")

步骤五:规则选择

如何使用支持度、置信度和提升度来选择关联规则?

# 根据支持度降序排序
rules_support <- sort(rules, by = "support", decreasing = TRUE)

# 输出前10条规则
inspect(rules_support[1:10])

# 根据置信度降序排序
rules_confidence <- sort(rules, by = "confidence", decreasing = TRUE)

# 输出前10条规则
inspect(rules_confidence[1:10])

# 根据提升度降序排序
rules_lift <- sort(rules, by = "lift", decreasing = TRUE)

# 输出前10条规则
inspect(rules_lift[1:10])
plot(rules_lift[1:10])

结果展示:

# > inspect(rules_support[1:10])
     lhs                            rhs            support   confidence coverage  lift count
[1]  {}                          => {hormon=[0,1]} 1.0000000 1.0000000  1.0000000 1    686  
[2]  {}                          => {meno=[0,1]}   1.0000000 1.0000000  1.0000000 1    686  
[3]  {hormon=[0,1]}              => {meno=[0,1]}   1.0000000 1.0000000  1.0000000 1    686  
[4]  {meno=[0,1]}                => {hormon=[0,1]} 1.0000000 1.0000000  1.0000000 1    686  
[5]  {grade=[2,3]}               => {hormon=[0,1]} 0.8819242 1.0000000  0.8819242 1    605  
[6]  {grade=[2,3]}               => {meno=[0,1]}   0.8819242 1.0000000  0.8819242 1    605  
[7]  {grade=[2,3], hormon=[0,1]} => {meno=[0,1]}   0.8819242 1.0000000  0.8819242 1    605  
[8]  {meno=[0,1], grade=[2,3]}   => {hormon=[0,1]} 0.8819242 1.0000000  0.8819242 1    605  
[9]  {}                          => {grade=[2,3]}  0.8819242 0.8819242  1.0000000 1    605  
[10] {hormon=[0,1]}              => {grade=[2,3]}  0.8819242 0.8819242  1.0000000 1    605  
...

步骤六:规则处理模块

这里对关联规则最终结果有两种处理方法,如下:

  • 特征工程:将关联规则的结果作为额外的特征添加到随机森林的输入特征中。可以将关联规则的结果编码为二进制变量,表示某个规则是否满足。然后将这些二进制变量作为新的特征添加到原始数据集中,一起用于训练随机森林模型。这样,随机森林模型可以利用关联规则的结果来辅助预测。
  • 集成学习:将关联规则的结果作为一个独立的模型,与随机森林模型进行集成。可以训练一个基于关联规则的模型,例如基于关联规则的分类器,然后将其与随机森林模型进行集成。可以使用投票、加权平均或者堆叠等集成方法来融合两个模型的预测结果,得到最终的预测结果。
lhs <- inspect(rules_lift[1:10])
# 提取关联规则
rules_df <- as(lhs, 'data.frame')
# 查看规则
rules_df

结果展示:

# > rules_df
                                                                   lhs                     rhs   support confidence  coverage     lift count
[1]                                   {age=[59,80], pgr=[89,2.38e+03]} => {er=[78.7,1.14e+03]} 0.1020408  0.8433735 0.1209913 2.526438    70
[2]                     {age=[59,80], pgr=[89,2.38e+03], hormon=[0,1]} => {er=[78.7,1.14e+03]} 0.1020408  0.8433735 0.1209913 2.526438    70
[3]                       {age=[59,80], meno=[0,1], pgr=[89,2.38e+03]} => {er=[78.7,1.14e+03]} 0.1020408  0.8433735 0.1209913 2.526438    70
[4]         {age=[59,80], meno=[0,1], pgr=[89,2.38e+03], hormon=[0,1]} => {er=[78.7,1.14e+03]} 0.1020408  0.8433735 0.1209913 2.526438    70
[5]                            {size=[30,120], grade=[2,3], er=[0,14)} =>         {pgr=[0,13)} 0.1020408  0.7526882 0.1355685 2.294863    70
[6]              {size=[30,120], grade=[2,3], er=[0,14), hormon=[0,1]} =>         {pgr=[0,13)} 0.1020408  0.7526882 0.1355685 2.294863    70
[7]                {meno=[0,1], size=[30,120], grade=[2,3], er=[0,14)} =>         {pgr=[0,13)} 0.1020408  0.7526882 0.1355685 2.294863    70
[8]  {meno=[0,1], size=[30,120], grade=[2,3], er=[0,14), hormon=[0,1]} =>         {pgr=[0,13)} 0.1020408  0.7526882 0.1355685 2.294863    70
[9]                                         {size=[30,120], er=[0,14)} =>         {pgr=[0,13)} 0.1020408  0.7446809 0.1370262 2.270449    70
[10]                          {size=[30,120], er=[0,14), hormon=[0,1]} =>         {pgr=[0,13)} 0.1020408  0.7446809 0.1370262 2.270449    70

将规则和数据写入到excel,然后通过excel公式判断该列数据是否符合规则。

write.csv(gbsg, file = "D:/log/gbsg.csv")

好了,到这里就会有人要问了,怎么在excel中利用公式判断是否符合规则了。接下来我会把excel的公式和规则一一对应并列出来。

  • 「规则一」{age=[59,80], pgr=[89,2.38e+03]} & {er=[78.7,1.14e+03]}

excel代码:=AND(AND(B2>=59,B2<80),AND(F2>=89,F2<2380),AND(G2>=78.7,G2<1140))

  • 「规则二」{age=[59,80], pgr=[89,2.38e+03], hormon=[0,1]} & {er=[78.7,1.14e+03]}

规则二和规则一没有本质的区别hormon它的值的范围就是0和1,因此excel代码和规则一一致,重复的就不需要加列值。

  • 「规则三」{hormon=[0,1]} & {meno=[0,1]} 所有的数据都符合条件,没有实际意义。

  • 「规则四」{age=[59,80], meno=[0,1], pgr=[89,2.38e+03], hormon=[0,1]} & {er=[78.7,1.14e+03]}

规则四和规则一没有本质的区别hormon它的值的范围就是0和1,因此excel代码和规则一一致,重复的就不需要加列值。

  • 「规则五」{size=[30,120], grade=[2,3], er=[0,14)} & {pgr=[0,13)}

excel代码:=AND(AND(D2>=30,D2<120),AND(E2>=2,E2<=3),AND(G2>=0,G2<14),AND(F2>=0,F2<13))

这里就演示到规则1-5,接下来我们把处理好的数据重新载入到R.

步骤七:构建随机森林模型

  • 数据载入
data <- read.csv(file.choose())
head(data)

结果展示:

   pid age meno size grade nodes pgr er hormon rfstime status rule_1 rule_5
1  132  49    0   18     2     2   0  0      0    1838      0  FALSE  FALSE
2 1575  55    1   20     3    16   0  0      0     403      1  FALSE  FALSE
3 1140  56    1   40     3     3   0  0      0    1603      0  FALSE   TRUE
4  769  45    0   25     3     1   0  4      0     177      0  FALSE  FALSE
5  130  65    1   30     2     5   0 36      1    1855      0  FALSE  FALSE
6 1642  48    0   52     2    11   0  0      0     842      1  FALSE   TRUE

  • 拆分训练集和测试集
gbsg <- data[,-1]
library(randomForest)
set.seed(1234)
# 随机分出训练集和测试集
trainIndex <- sample(1:nrow(gbsg), 0.8 * nrow(gbsg))
train <- gbsg[trainIndex,]
test <- gbsg[-trainIndex,]
# 构建随机森林模型
train$status <- as.factor(train$status)
rf_mod <- randomForest(status ~ ., data = train, ntree = 100)

# 获取模型预测的概率
pred_prob <- predict(rf_mod, newdata = testtype = "prob")

# 计算真阳性率和假阳性率
roc <- pROC::roc(test$status, pred_prob[, 2])

# 绘制ROC曲线
plot(roc, main = "ROC Curve", print.auc = TRUE, auc.polygon = TRUE, grid = TRUE, legacy.axes = TRUE,col="blue")

这里加了规则一和规则五之后,没有变化,下面可能是导致AUC没有变化的原因:

  • 弱相关性:关联规则的应用可能在数据集中并没有带来明显的影响。关联规则通常用于描述特征之间的关联关系,但可能在训练数据中没有强烈的相关性。在这种情况下,加入关联规则可能对模型的性能没有显著的影响,因此AUC保持不变。
  • 冗余规则:加入的关联规则可能与已有的特征或变量高度重复。如果关联规则提供了与已有特征类似的信息,那么加入这些规则可能不会带来额外的信息增益,并且不会对模型的性能产生显著影响。
  • 不适当的规则选择:选择的关联规则可能并不适用于给定的数据集和问题。关联规则的选择应该基于对数据集和问题域的理解和洞察力。如果选择的关联规则与实际情况不符合或不适用于当前问题,那么加入这些规则可能不会对模型的性能产生明显改变。
  • 模型鲁棒性:随机森林模型通常对于噪声和不相关的特征具有一定的鲁棒性。即使加入了关联规则,模型能够通过集成学习的方式对噪声进行平均化处理,并且仍然依赖于那些更具预测能力的特征。在这种情况下,加入关联规则可能不会对模型的整体性能产生显著影响。

五、总结

无监督学习在乳腺癌风险评估中扮演着重要的角色。通过无监督学习算法,我们可以发现数据集中的隐藏模式和异常样本,从而帮助我们更好地理解乳腺癌的发展和风险因素。这种无监督的方法可以帮助我们发现新的特征或关联,进一步优化乳腺癌的风险评估和预测模型。

关联规则作为一种挖掘特征之间关联关系的方法,在乳腺癌风险评估中具有潜在的价值。通过发现不同特征之间的关系,我们可以识别出潜在的风险因素,并将这些因素用于乳腺癌风险的预测和评估中。关联规则模型为我们提供了一种将这些关联关系转化为实际预测和决策的方法。

综上所述,无监督学习和关联规则在乳腺癌风险评估中具有潜在的价值。进一步的研究和应用将有助于提高乳腺癌的早期检测和个性化治疗,为乳腺癌患者提供更有效的护理和管理策略。

参考文献

  1. Araujo, Lourdes et al. “Discovering HIV related information by means of association rules and machine learning.” Scientific reports vol. 12,1 18208. 28 Oct. 2022, doi:10.1038/s41598-022-22695-y

*「未经许可,不得以任何方式复制或抄袭本篇文章之部分或全部内容。版权所有,侵权必究。」

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

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

相关文章

JApiDocs|SpringBoot集成JApiDocs用以生成API文档

框架简介 JApiDocs和Swagger都是用于生成API文档的工具&#xff0c;它们各自有一些优点。下面是JApiDocs相较于Swagger的几个优点&#xff1a; 简单易用&#xff1a;JApiDocs相对来说更加简单易用&#xff0c;配置和使用都比较简单明了。它使用Java注解来描述API信息&#xff0…

手机兼职浪潮:揭秘在家赚钱的新机遇

科思创业汇 大家好&#xff0c;这里是科思创业汇&#xff0c;一个轻资产创业孵化平台。赚钱的方式有很多种&#xff0c;我希望在科思创业汇能够给你带来最快乐的那一种&#xff01; 如今&#xff0c;随着智能手机的普及和互联网的发展&#xff0c;手机兼职已经成为一种新的浪…

新加坡 PBM 是可编程数字货币的重要创新

一周以前我们在卢旺达开会的时候&#xff0c;新加坡 MAS 在现场发布了 Purpose Bound Money &#xff08;PBM&#xff09; 的技术白皮书。行业媒体发了几条新闻&#xff0c;然后就放过去了。实际上 PBM 代表着货币当局对于数字货币编程问题迄今为止最深度的思考&#xff0c;其白…

MySQL:聚合函数(全面详解)

聚合函数 前言一、聚合函数介绍1、AVG和SUM函数2、 MIN和MAX函数3、COUNT函数 二、GROUP BY1、基本使用2、使用多个列分组3、 GROUP BY中使用WITH ROLLUP 三、HAVING1、基本使用2、WHERE和HAVING的对比 四、 SELECT的执行过程1、查询的结构2、SELECT执行顺序3、SQL 的执行原理 …

论好名字的重要性: Linux内核page到folio的变迁

一、引子 Once upon a time&#xff0c;Netscape的大拿 Phil Karlton曾经说过&#xff1a;“There are only two hard things in Computer Science: cache invalidation and naming things”&#xff0c;成为程序界流传甚广的名言&#xff0c;可见取名是计算机科学中最难的两件…

使用SSH远程直连Docker容器

文章目录 1. 下载docker镜像2. 安装ssh服务3. 本地局域网测试4. 安装cpolar5. 配置公网访问地址6. SSH公网远程连接测试7.固定连接公网地址8. SSH固定地址连接测试 转载自cpolar极点云文章&#xff1a;SSH远程直连Docker容器 在某些特殊需求下,我们想ssh直接远程连接docker 容器…

网约车进入饱和期,如祺出行继续蓄力还能泛起多大涟漪?

如祺出行的商业版图又有了新扩张。 6月28日&#xff0c;如祺出行正式开通厦门运营&#xff0c;这是继2022年6月进入长沙后&#xff0c;如祺出行在粤港澳大湾区之外聚焦运营的第二座城市。 而在此前&#xff0c;如祺出行宣布完成8.42亿元B轮融资。据了解&#xff0c;本轮融资为…

react-native-SerialPort 串口插件使用及配置

一、git地址和环境版本 &#xff08;1&#xff09;Git地址&#xff1a;https://github.com/Marcello168/react-native-SerialPort &#xff08;2&#xff09;node版本&#xff1a;14 &#xff08;3&#xff09;react-native版本&#xff1a;0.72 二、环境配置 &#xff08;…

CentOS 安装及基本配置

文章目录 1、root 免密码输入自动登录2、设置 Terminal 计算机终端背景颜色3、关闭关闭锁屏4、You need to be root to perform this command. 1、root 免密码输入自动登录 注&#xff1a;设置免密登录需要使用超级用户权限&#xff0c;即 root 权限 &#xff08;1&#xff0…

数字IC后端学习笔记:等效性检查和ECO

1.形式验证工具 对于某些电路的移植&#xff0c;一般不需要对新电路进行仿真验证&#xff0c;而可以直接通过EDA工具来分析该电路的功能是否与原电路一致&#xff0c;此种验证方法可以大量减少验证时间&#xff0c;提高电路的效率。 等效性检查&#xff08;Equivalence Check&a…

Nuxt重构的填坑之路

我的个人网站是用vuecli写的&#xff0c;SEO不忍直视。于是用Nuxt重构了代码&#xff0c;过程中踩了无数坑&#xff0c;记录如下 一&#xff1a;body样式不生效 正常的body样式设置不能生效&#xff0c;需要在nuxt.config.js中配置 1、设置bodyAttrs的class属性&#xff0c;…

毕业论文设计题目大全(源码+论文)_kaic

1 四足步行机器人设计-机械部分 2 吸扫一体机器人外壳注塑模具设计 3 吸扫一体机器人控制系统设计设计 4 吸扫一体机器人机械结构设计 5 汽车雨刷器机械结构及控制系统软硬件电路设计 6 家庭智能防盗报警系统的设计 7 小区电气智能控制系统的设计 8 果蔬智能售卖…

第66篇:顶级APT后门Sunburst通信流量全过程复盘分析

Part1 前言 大家好&#xff0c;我是ABC_123。前面几周分享了Solarwinds供应链攻击事件的详细攻击流程及Sunburst后门的设计思路&#xff0c;但是多数朋友还是对Sunburst后门的通信过程还是没看明白。本期ABC_123就从流量的角度&#xff0c;把Sunburst后门的通信过程完整地复盘…

压缩点云数据

压缩分辨率参数 LOW_RES_ONLINE_COMPRESSION&#xff1a;低分辨率的在线压缩模式&#xff0c;不保留颜色信息。 MED_RES_ONLINE_COMPRESSION&#xff1a;中等分辨率的在线压缩模式&#xff0c;不保留颜色信息。 HIGH_RES_ONLINE_COMPRESSION&#xff1a;高分辨率的在线压缩模…

Nacos架构与原理 - Nacos-Sync

文章目录 概述官网系统模块架构同步任务管理页面注册中心管理页面使用场景 概述 NacosSync 是⼀个支持多种注册中心的同步组件,基于 Spring boot 开发框架,数据层采用Spring Data JPA &#xff0c;遵循了标准的 JPA 访问规范&#xff0c;支持多种数据源存储,默认使用Hibernate…

c++11 标准模板(STL)(std::basic_ostream)(二)

定义于头文件 <ostream> template< class CharT, class Traits std::char_traits<CharT> > class basic_ostream : virtual public std::basic_ios<CharT, Traits> 类模板 basic_ostream 提供字符流上的高层输出操作。受支持操作包含有格式…

float:right 浮动布局后怎么清除浮动对后面元素的影响

1 用overflow:hidden和overflow:auto 在父元素上 2 用伪元素进行清除浮动 ::after

Ubuntu20.04LTS下安装Intel Realsense D435i驱动与ROS运行D435i节点

Ubuntu20.04LTS下安装Intel Realsense D435i驱动与ROS运行D435i节点 1&#xff1a;RealSense的SDK安装 1.1&#xff1a;更新初始化 sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade1.2&#xff1a;注册服务器的公钥 sudo apt-k…

安卓水果店的设计与实现

1.项目概述 随着科学技术和社会经济的不断提高&#xff0c;人们对服务的快捷、便利性要求也越来越高&#xff0c;从而对智能手机上的应用软件提出了更高的要求。一个基于安卓技术的水果系统能够为用户提供一个方便日常操作的便捷点餐功能,它能够满足广大手机用户的对日常水果的…

【Java可执行命令】(七)C头文件创建工具 javah:以Java本机接口(JNI)规范创建C头文件,深入解析创建工具javah ~

Java可执行命令详解之javah 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式3.1.1 可选参数&#xff1a;-o < file>3.1.2 可选参数&#xff1a;-classpath < path>3.1.3 可选参数&#xff1a;-jni 4️⃣ 应用场景5️⃣ 实现原理6️⃣ 注意事项&#x1f33e; 总结…