【机器学习】支持向量机与主成分分析在机器学习中的应用
文章目录
- 一、支持向量机概述
- 什么是支持向量机?
- 超平面和支持向量
- 大边距直觉
- 二、数据预处理与可视化
- 数据集的基本信息
- 导入必要的库
- 加载数据集
- 数据概况
- 数据可视化
- 特征对的散点图矩阵
- 类别分布条形图
- 平均面积与平均光滑度的散点图
- 变量之间的相关性热图
- 三、模型训练(问题解决)
- 数据准备与预处理
- 评估模型性能
- 支持向量机(SVM)
- 线性核 SVM
- 多项式核 SVM
- 径向基函数(RBF)核 SVM
- 总结
- 四、SVM 数据准备
- 模型训练与评估
- 多项式核 SVM
- 径向基函数(Radial Basis Function)核 SVM
- 支持向量机超参数调优
- 五、主成分分析
- PCA 简介
- PCA 可视化
- 解释组件
- 支持向量机(SVM)模型的参数调整
- 六、总结
支持向量机 (SVM) 是一种功能强大且用途广泛的机器学习模型,适用于线性和非线性分类、回归以及异常值检测。本文将介绍支持向量机算法及其在 scikit-learn 中的实现,并简要探讨主成分分析及其在 scikit-learn 中的应用。
一、支持向量机概述
支持向量机(SVM)是一种在机器学习领域广泛使用的算法,以其在较少计算资源下提供显著准确性的特点而受到青睐。SVM 可用于分类和回归任务,但在分类问题中应用最为广泛。
什么是支持向量机?
支持向量机的目标是在 N N N 维空间( N N N 为特征数)中找到一个能够明确区分数据点的超平面。该超平面使得不同类别的数据点被分开,并且尽可能远离超平面,从而确保分类的稳健性。
为了实现数据点的有效分离,可能存在多个超平面。我们的目标是选择一个具有最大边距的超平面,即两个类别之间的最大距离。最大化边距有助于提高分类的准确性。
超平面和支持向量
超平面是划分数据点的决策边界。位于超平面两侧的数据点可以被分为不同的类别。超平面的维度取决于特征的数量:如果输入特征为 2,则超平面是直线;如果特征为 3,则超平面是二维平面。当特征数量超过 3 时,超平面变得难以直观理解。
支持向量是指那些离超平面最近的点,这些点影响了超平面的位置和方向。通过这些支持向量,我们可以最大化分类器的边距。删除支持向量会改变超平面的位置,因此它们对构建 SVM 至关重要。
大边距直觉
在逻辑回归中,我们使用 S 型函数将线性函数的输出值压缩到 [0,1] 范围内,并根据阈值(0.5)分配标签。而在 SVM 中,我们使用线性函数的输出值来决定分类:如果输出大于 1,则属于一个类;如果输出为 -1,则属于另一个类。SVM 通过将输出值的阈值设为 1 和 -1,形成了边际范围 [-1,1]。
二、数据预处理与可视化
使用支持向量机来预测癌症诊断的良恶性。
数据集的基本信息
- 特征数为30个,例如:
- 半径(从中心到周长点的距离平均值)
- 纹理(灰度值的标准偏差)
- 周长
- 面积
- 平滑度(半径长度的局部变化)
- 紧凑度(周长^2 / 面积 - 1.0)
- 凹度(轮廓凹陷部分的严重程度)
- 凹点(轮廓凹陷部分的数量)
- 对称性
- 分形维数(“海岸线近似” - 1)
- 数据集包含 569 个样本,类别分布为 212 个恶性样本和 357 个良性样本。
- 目标类别:
- 恶性
- 良性
导入必要的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns%matplotlib inline
sns.set_style('whitegrid')
加载数据集
from sklearn.datasets import load_breast_cancercancer = load_breast_cancer()# 创建 DataFrame
col_names = list(cancer.feature_names)
col_names.append('target')
df = pd.DataFrame(np.c_[cancer.data, cancer.target], columns=col_names)
df.head()
数据概况
df.info()print(cancer.target_names)
# ['malignant', 'benign']# 数据描述:
df.describe()
# 统计摘要:
df.info()
数据可视化
特征对的散点图矩阵
sns.pairplot(df, hue='target', vars=['mean radius', 'mean texture', 'mean perimeter', 'mean area','mean smoothness', 'mean compactness', 'mean concavity','mean concave points', 'mean symmetry', 'mean fractal dimension'
])
类别分布条形图
sns.countplot(x=df['target'], label="Count")
平均面积与平均光滑度的散点图
plt.figure(figsize=(10, 8))
sns.scatterplot(x='mean area', y='mean smoothness', hue='target', data=df)
变量之间的相关性热图
plt.figure(figsize=(20,10))
sns.heatmap(df.corr(), annot=True)
三、模型训练(问题解决)
在机器学习中,模型训练是寻找问题解决方案的关键步骤。下面我们将介绍如何使用 scikit-learn
进行模型训练,并展示支持向量机(SVM)在不同内核下的性能表现。
数据准备与预处理
首先,我们需要准备和预处理数据。以下是数据预处理的代码示例:
from sklearn.model_selection import cross_val_score, train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, MinMaxScalerX = df.drop('target', axis=1)
y = df.targetprint(f"'X' shape: {X.shape}")
print(f"'y' shape: {y.shape}")
# 'X' shape: (569, 30)
# 'y' shape: (569,)pipeline = Pipeline([('min_max_scaler', MinMaxScaler()),('std_scaler', StandardScaler())
])X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
在代码中,我们使用 MinMaxScaler
和 StandardScaler
对数据进行缩放。数据被分为训练集和测试集,其中 30% 的数据用于测试。
评估模型性能
为了评估模型的性能,我们定义了一个 print_score
函数,该函数可以输出训练和测试结果的准确率、分类报告和混淆矩阵:
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
import pandas as pddef print_score(clf, X_train, y_train, X_test, y_test, train=True):if train:pred = clf.predict(X_train)clf_report = pd.DataFrame(classification_report(y_train, pred, output_dict=True))print("Train Result:\n================================================")print(f"Accuracy Score: {accuracy_score(y_train, pred) * 100:.2f}%")print("_______________________________________________")print(f"CLASSIFICATION REPORT:\n{clf_report}")print("_______________________________________________")print(f"Confusion Matrix: \n {confusion_matrix(y_train, pred)}\n")else:pred = clf.predict(X_test)clf_report = pd.DataFrame(classification_report(y_test, pred, output_dict=True))print("Test Result:\n================================================") print(f"Accuracy Score: {accuracy_score(y_test, pred) * 100:.2f}%")print("_______________________________________________")print(f"CLASSIFICATION REPORT:\n{clf_report}")print("_______________________________________________")print(f"Confusion Matrix: \n {confusion_matrix(y_test, pred)}\n")
支持向量机(SVM)
支持向量机(SVM)是一种强大的分类算法,其性能受超参数的影响。下面将介绍 SVM 的主要参数及其对模型性能的影响:
- C 参数:控制正确分类训练点和拥有平滑决策边界之间的权衡。较小的 C C C(宽松)使误分类成本(惩罚)较低(软边距),而较大的 C C C(严格)使误分类成本较高(硬边距),迫使模型更严格地解释输入数据。
- gamma 参数:控制单个训练集的影响范围。较大的 γ \gamma γ 使影响范围较近(较近的数据点具有较高的权重),较小的 γ \gamma γ 使影响范围较广(更广泛的解决方案)。
- degree 参数:多项式核函数(
'poly'
)的度,被其他内核忽略。可以通过网格搜索来找到最佳超参数值。
线性核 SVM
线性核 SVM 适用于大多数情况,特别是当数据集具有大量特征时。以下是使用线性核 SVM 的代码示例:
from sklearn.svm import LinearSVCmodel = LinearSVC(loss='hinge', dual=True)
model.fit(X_train, y_train)print_score(model, X_train, y_train, X_test, y_test, train=True)
print_score(model, X_train, y_train, X_test, y_test, train=False)
训练和测试结果如下:
训练结果:
Accuracy Score: 86.18%
_______________________________________________
CLASSIFICATION REPORT:0.0 1.0 accuracy macro avg weighted avg
precision 1.000000 0.819079 0.861809 0.909539 0.886811
recall 0.630872 1.000000 0.861809 0.815436 0.861809
f1-score 0.773663 0.900542 0.861809 0.837103 0.853042
support 149.000000 249.000000 0.861809 398.000000 398.000000
_______________________________________________
Confusion Matrix: [[ 94 55][ 0 249]]
测试结果:
Accuracy Score: 89.47%
_______________________________________________
CLASSIFICATION REPORT:0.0 1.0 accuracy macro avg weighted avg
precision 1.000000 0.857143 0.894737 0.928571 0.909774
recall 0.714286 1.000000 0.894737 0.857143 0.894737
f1-score 0.833333 0.923077 0.894737 0.878205 0.890013
support 63.000000 108.000000 0.894737 171.000000 171.000000
_______________________________________________
Confusion Matrix: [[ 45 18][ 0 108]]
多项式核 SVM
多项式核 SVM 适用于非线性数据。以下是使用二阶多项式核的代码示例:
from sklearn.svm import SVCmodel = SVC(kernel='poly', degree=2, gamma='auto', coef0=1, C=5)
model.fit(X_train, y_train)print_score(model, X_train, y_train, X_test, y_test, train=True)
print_score(model, X_train, y_train, X_test, y_test, train=False)
训练和测试结果如下:
训练结果:
Accuracy Score: 96.98%
_______________________________________________
CLASSIFICATION REPORT:0.0 1.0 accuracy macro avg weighted avg
precision 0.985816 0.961089 0.969849 0.973453 0.970346
recall 0.932886 0.991968 0.969849 0.962427 0.969849
f1-score 0.958621 0.976285 0.969849 0.967453 0.969672
support 149.000000 249.000000 0.969849 398.000000 398.000000
_______________________________________________
Confusion Matrix: [[139 10][ 2 247]]
测试结果:
Accuracy Score: 97.08%
_______________________________________________
CLASSIFICATION REPORT:0.0 1.0 accuracy macro avg weighted avg
precision 0.967742 0.972477 0.97076 0.970109 0.970733
recall 0.952381 0.981481 0.97076 0.966931 0.970760
f1-score 0.960000 0.976959 0.97076 0.968479 0.970711
support 63.000000 108.000000 0.97076 171.000000 171.000000
_______________________________________________
Confusion Matrix: [[ 60 3][ 2 106]]
径向基函数(RBF)核 SVM
径向基函数(RBF)核适用于处理非线性数据。以下是使用 RBF 核的代码示例:
model = SVC(kernel='rbf', gamma=0.5, C=0.1)
model.fit(X_train, y_train)print_score(model, X_train, y_train, X_test, y_test, train=True)
print_score(model, X_train, y_train, X_test, y_test, train=False)
训练和测试结果如下:
训练结果:
Accuracy Score: 62.56%
_______________________________________________
CLASSIFICATION REPORT:0.0 1.0 accuracy macro avg weighted avg
precision 0.0 0.625628 0.625628 0.312814 0.392314
recall 0.0 1.000000 0.625628 0.500000 0.625628
f1-score 0.0 0.769231 0.625628 0.384615 0.615385
support 149.0 249.0 0.625628 398.0 398.0
_______________________________________________
Confusion Matrix: [[ 0 149][ 0 249]]
测试结果:
Accuracy Score: 64.97%
_______________________________________________
CLASSIFICATION REPORT:0.0 1.0 accuracy macro avg weighted avg
precision 0.0 0.655172 0.649661 0.327586 0.409551
recall 0.0 1.000000 0.649661 0.500000 0.649661
f1-score 0.0 0.792453 0.649661 0.396226 0.628252
support 63.0 108.0 0.649661 171.0 171.0
_______________________________________________
Confusion Matrix: [[ 0 63][ 0 108]]
总结
通过以上模型训练和评估过程,我们可以观察到不同 SVM 内核的性能差异。线性核 SVM 在准确性和训练时间上表现良好,适用于数据维度较高的情况。多项式核 SVM 和 RBF 核 SVM 在非线性数据上具有更好的表现,但在某些参数设置下可能会导致过拟合。选择合适的内核和超参数对于模型性能的提升至关重要。
四、SVM 数据准备
数字输入:SVM 假设输入数据为数字。如果输入数据为分类变量,可能需要将其转换为二进制虚拟变量(每个类别一个变量)。
二元分类:基本的 SVM 适用于二元分类问题。虽然 SVM 主要用于二元分类,但也有扩展版本用于回归和多类分类。
X_train = pipeline.fit_transform(X_train)
X_test = pipeline.transform(X_test)
模型训练与评估
以下展示了不同 SVM 内核的训练和测试结果:
线性核 SVM
print("=======================Linear Kernel SVM==========================")
model = SVC(kernel='linear')
model.fit(X_train, y_train)print_score(model, X_train, y_train, X_test, y_test, train=True)
print_score(model, X_train, y_train, X_test, y_test, train=False)
训练结果:
Accuracy Score: 98.99%
_______________________________________________
CLASSIFICATION REPORT:0.0 1.0 accuracy macro avg weighted avg
precision 1.000000 0.984190 0.98995 0.992095 0.990109
recall 0.973154 1.000000 0.98995 0.986577 0.989950
f1-score 0.986395 0.992032 0.98995 0.989213 0.989921
support 149.000000 249.000000 0.98995 398.000000 398.000000
_______________________________________________
Confusion Matrix: [[145 4][ 0 249]]测试结果Accuracy Score: 97.66%
_______________________________________________
CLASSIFICATION REPORT:0.0 1.0 accuracy macro avg weighted avg
precision 0.968254 0.981481 0.976608 0.974868 0.976608
recall 0.968254 0.981481 0.976608 0.974868 0.976608
f1-score 0.968254 0.981481 0.976608 0.974868 0.976608
support 63.000000 108.000000 0.976608 171.000000 171.000000
_______________________________________________
Confusion Matrix: [[ 61 2][ 2 106]]
多项式核 SVM
print("=======================Polynomial Kernel SVM==========================")
from sklearn.svm import SVCmodel = SVC(kernel='poly', degree=2, gamma='auto')
model.fit(X_train, y_train)print_score(model, X_train, y_train, X_test, y_test, train=True)
print_score(model, X_train, y_train, X_test, y_test, train=False)
训练结果:
Accuracy Score: 85.18%
_______________________________________________
CLASSIFICATION REPORT:0.0 1.0 accuracy macro avg weighted avg
precision 0.978723 0.812500 0.851759 0.895612 0.874729
recall 0.617450 0.991968 0.851759 0.804709 0.851759
f1-score 0.757202 0.893309 0.851759 0.825255 0.842354
support 149.000000 249.000000 0.851759 398.000000 398.000000
_______________________________________________
Confusion Matrix: [[ 92 57][ 2 247]]测试结果:Accuracy Score: 82.46%
_______________________________________________
CLASSIFICATION REPORT:0.0 1.0 accuracy macro avg weighted avg
precision 0.923077 0.795455 0.824561 0.859266 0.842473
recall 0.571429 0.972222 0.824561 0.771825 0.824561
f1-score 0.705882 0.875000 0.824561 0.790441 0.812693
support 63.000000 108.000000 0.824561 171.000000 171.000000
_______________________________________________
Confusion Matrix: [[ 36 27][ 3 105]]
径向基函数(Radial Basis Function)核 SVM
print("=======================Radial Kernel SVM==========================")
from sklearn.svm import SVCmodel = SVC(kernel='rbf', gamma=1)
model.fit(X_train, y_train)print_score(model, X_train, y_train, X_test, y_test, train=True)
print_score(model, X_train, y_train, X_test, y_test, train=False)
训练结果:
Accuracy Score: 100.00%
_______________________________________________
CLASSIFICATION REPORT:0.0 1.0 accuracy macro avg weighted avg
precision 1.0 1.0 1.0 1.0 1.0
recall 1.0 1.0 1.0 1.0 1.0
f1-score 1.0 1.0 1.0 1.0 1.0
support 149.0 249.0 1.0 398.0 398.0
_______________________________________________
Confusion Matrix: [[149 0][ 0 249]]测试结果:Accuracy Score: 63.74%
_______________________________________________
CLASSIFICATION REPORT:0.0 1.0 accuracy macro avg weighted avg
precision 1.000000 0.635294 0.637427 0.817647 0.769659
recall 0.015873 1.000000 0.637427 0.507937 0.637427
f1-score 0.031250 0.776978 0.637427 0.404114 0.502236
support 63.000000 108.000000 0.637427 171.000000 171.000000
_______________________________________________
Confusion Matrix: [[ 1 62][ 0 108]]
支持向量机超参数调优
from sklearn.model_selection import GridSearchCVparam_grid = {'C': [0.01, 0.1, 0.5, 1, 10, 100], 'gamma': [1, 0.75, 0.5, 0.25, 0.1, 0.01, 0.001], 'kernel': ['rbf', 'poly', 'linear']} grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=1, cv=5)
grid.fit(X_train, y_train)best_params = grid.best_params_
print(f"Best params: {best_params}")svm_clf = SVC(**best_params)
svm_clf.fit(X_train, y_train)
print_score(svm_clf, X_train, y_train, X_test, y_test, train=True)
print_score(svm_clf, X_train, y_train, X_test, y_test, train=False)
训练结果:
Accuracy Score: 98.24%
_______________________________________________
CLASSIFICATION REPORT:0.0 1.0 accuracy macro avg weighted avg
precision 0.986301 0.980159 0.982412 0.983230 0.982458
recall 0.966443 0.991968 0.982412 0.979205 0.982412
f1-score 0.976271 0.986028 0.982412 0.981150 0.982375
support 149.000000 249.000000 0.982412 398.000000 398.000000
_______________________________________________
Confusion Matrix: [[144 5][ 2 247]]测试结果:Accuracy Score: 98.25%
_______________________________________________
CLASSIFICATION REPORT:0.0 1.0 accuracy macro avg weighted avg
precision 0.983871 0.981651 0.982456 0.982761 0.982469
recall 0.968254 0.990741 0.982456 0.979497 0.982456
f1-score 0.976000 0.986175 0.982456 0.981088 0.982426
support 63.000000 108.000000 0.982456 171.000000 171.000000
_______________________________________________
Confusion Matrix: [[ 61 2][ 1 107]]
五、主成分分析
PCA 简介
主成分分析(PCA)是一种通过将数据投影到较低维空间来实现线性降维的技术,具体步骤如下:
- 使用奇异值分解:通过奇异值分解将数据投影到低维空间。
- 无监督学习:PCA 不需要标记数据来进行降维。
- 特征转换:尝试找出哪些特征可以解释数据中的最大差异。
PCA 可视化
由于高维数据难以直接可视化,我们可以使用 PCA 找到前两个主成分,并在二维空间中可视化数据。为了实现这一点,需要先对数据进行标准化,使每个特征的方差为单位方差。
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt# 数据标准化
scaler = StandardScaler()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# PCA 降维
pca = PCA(n_components=2)
X_train = pca.fit_transform(X_train)
X_test = pca.transform(X_test)# 可视化前两个主成分
plt.figure(figsize=(8,6))
plt.scatter(X_train[:,0], X_train[:,1], c=y_train, cmap='plasma')
plt.xlabel('First Principal Component')
plt.ylabel('Second Principal Component')
plt.show()
通过前两个主成分,我们可以在二维空间中轻松分离不同类别的数据点。
解释组件
降维虽然强大,但组件的含义较难直接理解。每个组件对应于原始特征的组合,这些组件可以通过拟合 PCA 对象获得。
组件的相关属性包括:
- 成分得分:变换后的变量值。
- 载荷(权重):特征的组合权重。
- 数据压缩和信息保存:通过 PCA 实现数据的压缩同时保留关键信息。
- 噪声过滤:降维过程中可以过滤掉噪声。
- 特征提取和工程:用于提取和构造新的特征。
支持向量机(SVM)模型的参数调整
在使用支持向量机(SVM)进行模型训练时,我们需要调整超参数以获得最佳模型。以下是使用网格搜索(GridSearchCV)调整 SVM 参数的示例代码:
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV# 定义参数网格
param_grid = {'C': [0.01, 0.1, 0.5, 1, 10, 100], 'gamma': [1, 0.75, 0.5, 0.25, 0.1, 0.01, 0.001], 'kernel': ['rbf', 'poly', 'linear']} # 网格搜索
grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=1, cv=5)
grid.fit(X_train, y_train)
best_params = grid.best_params_
print(f"Best params: {best_params}")# 使用最佳参数训练模型
svm_clf = SVC(**best_params)
svm_clf.fit(X_train, y_train)
训练结果:
Accuracy Score: 96.48%
_______________________________________________
CLASSIFICATION REPORT:0.0 1.0 accuracy macro avg weighted avg
precision 0.978723 0.957198 0.964824 0.967961 0.965257
recall 0.926174 0.987952 0.964824 0.957063 0.964824
f1-score 0.951724 0.972332 0.964824 0.962028 0.964617
support 149.000000 249.000000 0.964824 398.000000 398.000000
_______________________________________________
Confusion Matrix: [[138 11][ 3 246]]测试结果:Accuracy Score: 96.49%
_______________________________________________
CLASSIFICATION REPORT:0.0 1.0 accuracy macro avg weighted avg
precision 0.967213 0.963636 0.964912 0.965425 0.964954
recall 0.936508 0.981481 0.964912 0.958995 0.964912
f1-score 0.951613 0.972477 0.964912 0.962045 0.964790
support 63.000000 108.000000 0.964912 171.000000 171.000000
_______________________________________________
Confusion Matrix: [[ 59 4][ 2 106]]
六、总结
本文我们学习了以下内容:
- 支持向量机(SVM):了解了 SVM 的基本概念及其在 Python 中的实现。
- SVM 核函数:包括线性、径向基函数(RBF)和多项式核函数。
- 数据准备:如何为 SVM 算法准备数据。
- 超参数调整:通过网格搜索调整 SVM 的超参数。
- 主成分分析(PCA):如何使用 PCA 降低数据的复杂性,并在 scikit-learn 中进行重用。
参考:Support Vector Machine & PCA Tutorial for Beginner
推荐我的相关专栏:
- python 错误记录
- python 笔记
- 数据结构
相关文章:

【机器学习】支持向量机与主成分分析在机器学习中的应用
文章目录 一、支持向量机概述什么是支持向量机?超平面和支持向量大边距直觉 二、数据预处理与可视化数据集的基本信息导入必要的库加载数据集数据概况数据可视化特征对的散点图矩阵类别分布条形图平均面积与平均光滑度的散点图变量之间的相关性热图 三、模型训练&am…...
SpringBoot项目架构实战之“网关zuul搭建“
第三章 网关zuul搭建 前言: 1、主要功能 zuul主要提供动态路由(内置ribbon实现)和过滤(可以做统一鉴权过滤器、灰度发布过滤器、黑白名单IP过滤器、服务限流过滤器(可以配合Sentinel实现))功能…...

发挥储能系统领域优势,海博思创坚定不移推动能源消费革命
随着新发展理念的深入贯彻,我国正全面落实“双碳”目标任务,通过积极转变能源消费方式,大幅提升能源利用效率,实现了以年均约3.3%的能源消费增长支撑了年均超过6%的国民经济增长。这一成就的背后,是我国能源结构的持续…...

matlab R2016b安装cplex12.6,测试时cplex出现出现内部错误的解决方法
问题场景 网上搜索matlabyalmipcplex的安装教程,跟着步骤操作即可,假如都安装好了,在matlab中测试安装是否成功,出现以下问题: 1、matlab中设置路径中添加了yalmip和cplex路径,在命令窗口中输入yalmiptest…...
C#中的Dictionary
Dictionary<TKey, TValue> 是一个泛型集合,它存储键值对(key-value pairs),其中每个键(key)都是唯一的。这个集合类提供了快速的数据插入和检索功能,因为它是基于哈希表实现的。 注意 ke…...
VSCode中多行文本的快速前后缩进
快捷键 VSCode提供了一组快捷键,用于快速调整选中文本行的缩进。 增加缩进(向前缩进):在Windows和Linux上按 Tab 键,在Mac上按 ⇧⇥(Shift Tab)。减少缩进(向后缩进)&…...
C# 8.0 新语法的学习和使用
C# 8.0 是微软在 2019 年 9 月 23 日随 .NET Core 3.0 一同发布的一个重要版本更新,带来了许多新的语言特性和改进。本文将详细介绍 C# 8.0 的新语法,并通过实际应用案例展示这些新特性的使用方法。 目录 1. 可空引用类型 2. 异步流 3. 默认接口方…...

数据结构——约瑟夫环C语言链表实现
约瑟夫环问题由古罗马史学家约瑟夫(Josephus)提出,他参加并记录了公元66—70年犹太人反抗罗马的起义。在城市沦陷之后,他和40名死硬的将士在附近的一个洞穴中避难。起义者表示“宁为玉碎不为瓦全”,约瑟夫则想“留得青…...

【MyBatis】——入门基础知识必会内容
🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL࿰…...
react父调用子的方法,子调用父的方法
父调用子的方法 // 子组件 import React, { useRef, useEffect } from react;const ChildComponent ({ childMethodRef }) > {const childMethod useRef(null);useEffect(() > {childMethodRef.current childMethod;}, []);const someMethod () > {console.log(子…...

C#知识|账号管理系统:UI层-添加账号窗体设计思路及流程。
哈喽,你好啊,我是雷工! 前边练习过详情页窗体的设计思路及流程: 《C#知识|上位机UI设计-详情窗体设计思路及流程(实例)》 本节练习添加账号窗体的UI设计,以下为学习笔记。 01 效果展示 02 添加窗体 在UI层添加Windows窗体,设置名称为:FrmAddAcount.cs 设置窗体属…...

【机器学习】初学者经典案例(随记)
🎈边走、边悟🎈迟早会好 一、概念 机器学习是一种利用数据来改进模型性能的计算方法,属于人工智能的一个分支。它旨在让计算机系统通过经验自动改进,而不需要明确编程。 类型 监督学习:使用带标签的数据进行训练&…...
进阶版智能家居系统Demo[C#]:整合AI和自动化
引言 在基础智能家居系统的基础上,我们将引入更多高级功能,包括AI驱动的自动化控制、数据分析和预测。这些进阶功能将使智能家居系统更加智能和高效。 目录 高级智能家居功能概述使用C#和AI实现智能家居自动化实现智能照明系统的高级功能 自动调节亮度…...

IC后端设计中的shrink系数设置方法
我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 在一些成熟的工艺节点通过shrink的方式(光照过程中缩小特征尺寸比例)得到了半节点,比如40nm从45nm shrink得到,28nm从32nm shrink得到,由于半节点的性能更优异,成本又低,漏电等不利因素也可以…...

在NVIDIA Jetson平台离线部署大模型
在NVIDIA Jetson平台离线部署大模型,开启离线具身智能新纪元。 本项目提供一种将LMDeploy移植到NVIDIA Jetson系列边缘计算卡的方法,并在Jetson计算卡上运行InternLM系列大模型,为离线具身智能提供可能。 最新新闻🎉 [2024/3/1…...

51单片机嵌入式开发:8、 STC89C52RC 操作LCD1602原理
STC89C52RC 操作LCD1602原理 1 LCD1602概述1.1 LCD1602介绍1.2 LCD1602引脚说明1.3 LCD1602指令介绍 2 LCD1602外围电路2.1 LCD1602接线方法2.2 LCD1602电路原理 3 LCD1602软件操作3.1 LCD1602显示3.2 LCD1602 protues仿真 4 总结 1 LCD1602概述 1.1 LCD1602介绍 LCD1602是一种…...

数字化时代的供应链管理综合解决方案
目录 引言背景与意义供应链管理综合解决方案的目标 📄供应链管理系统主要功能系统优势 📄物流管理系统主要功能系统优势 📄订单管理系统主要功能应用场景 📄仓储管理系统系统亮点主要功能系统优势 📄商城管理系统主要功…...

CentOS 安装 annie/lux,以及 annie/lux 的使用
annie 介绍 如果第一次听到 annie 想必都会觉得陌生,annie 被大家称为视频下载神器,annie 作者介绍说可以下载抖音、哔哩哔哩、优酷、爱奇艺、芒果TV、YouTube、Tumblr、Vimeo 等平台的视频。 githup:https://github.com/pingf/annie 支持…...

拥抱UniHttp,规范Http接口对接之旅
前言 如果你项目里还在用传统的编程式Http客户端比如HttpClient、Okhttp去直接对接第三方Http接口, 那么你项目一定充斥着大量的对接逻辑和代码, 并且针对不同的对接渠道方需要每次封装一次调用的简化, 一旦封装不好系统将会变得难以维护&am…...

Python 给存入 Redis 的键值对设置过期时间
Redis 是一种内存中的数据存储系统,与许多传统数据库相比,它具有一些优势,其中之一就是可以设置数据的过期时间。通过 Redis 的过期时间设置,可以为存储在 Redis 中的数据设置一个特定的生存时间。一旦数据到达过期时间࿰…...

docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...

C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...