网站怎么做播放器,我的长沙app,商务网页设计与制作课后答案,资料库网站开发报价支持向量机 #xff08;四#xff09;支持向量机1.算法步骤2. MATLAB 实现参考资料 #xff08;四#xff09;支持向量机
支持向量机#xff08;Support Vector Machine, SVM#xff09;是一种用于分类、回归分析以及异常检测的监督学习模型。SVM特别擅长处理高维空间的… 支持向量机 四支持向量机1.算法步骤2. MATLAB 实现参考资料 四支持向量机
支持向量机Support Vector Machine, SVM是一种用于分类、回归分析以及异常检测的监督学习模型。SVM特别擅长处理高维空间的数据并在文本和图像分类、生物信息学等领域有着广泛的应用。
核心概念 最大间隔超平面 超平面在二维空间中超平面是一条直线在三维空间中是一个平面更高维度则是超平面最大间隔SVM的目标是找到一个能够将不同类别的样本分开并且使得两类之间的间隔最大化。这个间隔是由距离超平面最近的数据点即支持向量来定义的。 支持向量 支持向量位于分类边界决策边界或超平面最近的数据点称为支持向量。这些点对于定义最优超平面至关重要。即使去掉其他非支持向量的数据点也不会影响超平面的位置。 核技巧Kernel Trick 当数据不是线性可分时可以通过使用核函数将原始特征空间映射到一个更高维度的空间在那里数据可能变得线性可分。常用的核函数包括 线性核适用于线性可分的数据多项式核可以捕捉输入变量间的非线性关系RBF径向基函数核非常流行尤其适合于复杂的非线性问题Sigmoid核类似于神经网络中的激活函数。 软间隔与硬间隔 硬间隔假设数据完全线性可分寻找一个能够完美分离所有训练样本的超平面。软间隔允许某些样本跨越边际甚至落在错误的一侧通过引入松弛变量和惩罚参数C来实现。这有助于提高模型对噪声的鲁棒性和泛化能力。
1.算法步骤 #mermaid-svg-c5k5G0oteHvYRXei {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-c5k5G0oteHvYRXei .error-icon{fill:#552222;}#mermaid-svg-c5k5G0oteHvYRXei .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-c5k5G0oteHvYRXei .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-c5k5G0oteHvYRXei .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-c5k5G0oteHvYRXei .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-c5k5G0oteHvYRXei .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-c5k5G0oteHvYRXei .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-c5k5G0oteHvYRXei .marker{fill:#333333;stroke:#333333;}#mermaid-svg-c5k5G0oteHvYRXei .marker.cross{stroke:#333333;}#mermaid-svg-c5k5G0oteHvYRXei svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-c5k5G0oteHvYRXei .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-c5k5G0oteHvYRXei .cluster-label text{fill:#333;}#mermaid-svg-c5k5G0oteHvYRXei .cluster-label span{color:#333;}#mermaid-svg-c5k5G0oteHvYRXei .label text,#mermaid-svg-c5k5G0oteHvYRXei span{fill:#333;color:#333;}#mermaid-svg-c5k5G0oteHvYRXei .node rect,#mermaid-svg-c5k5G0oteHvYRXei .node circle,#mermaid-svg-c5k5G0oteHvYRXei .node ellipse,#mermaid-svg-c5k5G0oteHvYRXei .node polygon,#mermaid-svg-c5k5G0oteHvYRXei .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-c5k5G0oteHvYRXei .node .label{text-align:center;}#mermaid-svg-c5k5G0oteHvYRXei .node.clickable{cursor:pointer;}#mermaid-svg-c5k5G0oteHvYRXei .arrowheadPath{fill:#333333;}#mermaid-svg-c5k5G0oteHvYRXei .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-c5k5G0oteHvYRXei .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-c5k5G0oteHvYRXei .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-c5k5G0oteHvYRXei .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-c5k5G0oteHvYRXei .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-c5k5G0oteHvYRXei .cluster text{fill:#333;}#mermaid-svg-c5k5G0oteHvYRXei .cluster span{color:#333;}#mermaid-svg-c5k5G0oteHvYRXei div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-c5k5G0oteHvYRXei :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 开始 数据准备 数据预处理 选择核函数 求解优化问题 构建决策边界 模型评估 结束 数据准备 目标收集与业务问题相关的结构化数据关键操作 定义特征如客户收入、信用历史、消费行为和标签如“违约/非违约”。划分数据集为训练集70% ~ 80%和测试集20% ~ 30%。 数据预处理 标准化对特征进行 Z-score 标准化消除量纲影响 x s c a l e d x − μ σ x_{scaled}\frac{x−μ}{σ} xscaledσx−μ处理缺失值删除或填充缺失数据如用均值/中位数类别平衡若标签分布不均使用过采样SMOTE或欠采样。 选择核函数 常用核函数 线性核linear适用于线性可分问题复杂度低 K ( x i , x j ) x i T x j K(x_i,x_j)x_i^Tx_j K(xi,xj)xiTxj高斯核RBF适用于非线性问题需调节参数 γ γ γ K ( x i , x j ) e x p ( − γ ∥ x i − x j ∥ 2 ) K(x_i,x_j)exp(−γ \lVert xi−xj \rVert ^2) K(xi,xj)exp(−γ∥xi−xj∥2)多项式核polynomial适用于高阶特征交互 K ( x i , x j ) ( x i T x j c ) d K(x_i,x_j)(x_i^Tx_jc)^d K(xi,xj)(xiTxjc)d 求解优化问题 目标函数最大化间隔转化为凸二次规划问题 min w , b 1 2 ∥ w ∥ 2 C ∑ i 1 n ξ i \min_{w,b} \frac{1}{2} \|w\|^2 C \sum_{i1}^{n} \xi_i w,bmin21∥w∥2Ci1∑nξi s.t. y i ( w T x i b ) ≥ 1 − ξ i , ξ i ≥ 0 \text{s.t. } y_i(w^T x_i b) \geq 1 - \xi_i, \quad \xi_i \geq 0 s.t. yi(wTxib)≥1−ξi,ξi≥0 参数 C C C 正则化参数控制分类错误的惩罚力度 γ γ γ高斯核控制决策边界的复杂度。 构建决策边界 支持向量距离决策边界最近的样本点。分类规则 f ( x ) s i g n ( ∑ i 1 n α i y i K ( x i , x ) b ) f(x) \mathrm{sign} \left( \sum_{i1}^{n} \alpha_i y_i K(x_i, x) b \right) f(x)sign(i1∑nαiyiK(xi,x)b) 模型评估 分类指标 准确率Accuracy模型预测正确的样本数占总样本数的比例 A c c u r a c y T P T N T P F P F N T N Accuracy\frac{TPTN}{TPFPFNTN} AccuracyTPFPFNTNTPTN精确率Precision正确预测为正类的样本数占所有预测为正类的样本数的比例公式 A c c u r a c y T P / ( T P F P ) AccuracyTP / (TP FP) AccuracyTP/(TPFP)。召回率Recall正确预测为正类的样本数占所有实际正类样本数的比例。公式 R e c a l l T P / ( T P F N ) RecallTP / (TP FN) RecallTP/(TPFN)。F1分数F1 Score精确率和召回率的调和平均数用于综合评估两者的表现公式 F 1 S c o r e 2 ∗ ( P r e c i s i o n ∗ R e c a l l ) / ( P r e c i s i o n R e c a l l ) F1\ Score2 * (Precision * Recall) / (Precision Recall) F1 Score2∗(Precision∗Recall)/(PrecisionRecall)。ROC 曲线与 AUC 值适用于二分类 ROC 曲线是一种展示分类模型在不同阈值下的性能的图形化方法它通过绘制真阳性率TPRTrue Positive Rate对假阳性率FPRFalse Positive Rate来实现 真阳性率 T P R T P T P F N 真阳性率TPR \frac{TP}{TPFN} 真阳性率TPRTPFNTP也称为召回率Recall 假阳性率 F P R F P F P T N 假阳性率FPR \frac{FP}{FPTN} 假阳性率FPRFPTNFP。ROC 曲线展示了模型区分正负类别的能力。理想情况下希望 TPR 尽可能高同时保持FPR尽可能低。曲线越靠近左上角即 TPR接近 1 而 FPR 接近 0 表示模型的性能越好。 AUC 指的是ROC曲线下方的面积大小它是衡量模型区分能力的一个单一数值指标AUC的取值范围从0到1其中 AUC 1 表示完美的分类器AUC 0.5 表示模型的表现与随机猜测相同AUC 0.5 则表示模型比随机猜测还要差这种情况通常可以通过反转预测标签来改善。AUC值越高说明模型的平均性能越好对于不平衡数据集来说AUC是一个非常有用的评估标准因为它不直接依赖于类别分布的比例。 回归指标SVR 均方误差MSE预测值与实际值之间差异的平方的平均值 R 2 R² R2 值决定系数表示模型解释变量变异的比例。
2. MATLAB 实现
银行需根据客户信息预测其贷款违约风险特征包括
年龄、月收入、信用评分、负债比负债/收入、历史违约次数 标签0正常客户1高风险客户。 %% 支持向量机SVM根据客户信息预测其贷款违约风险
clc; clear; close all;%% 生成模拟数据1000个样本
rng(25); % 固定随机种子
num_samples 1000;% 特征生成
age randi([22, 65], num_samples, 1); % 年龄22-65岁
income rand(num_samples, 1)*15000 3000; % 月收入3000-18000
credit_score randn(num_samples, 1)*50 650; % 信用评分均值650标准差50
debt_ratio rand(num_samples, 1)*0.7 0.1; % 负债比0.1-0.8
past_default randi([0, 3], num_samples, 1); % 历史违约次数0-3次% 标签生成违约概率与负债比、历史违约次数正相关
default_prob 1 ./ (1 exp(-(0.5*debt_ratio 0.8*past_default - 0.1*(credit_score-600)/50)));
labels double(default_prob 0.6); % 阈值0.6% 合并特征矩阵
X [age, income, credit_score, debt_ratio, past_default];
y labels;%% 数据标准化Z-score
X_scaled zscore(X);% 按7:3划分训练集和测试集
cv cvpartition(y, HoldOut, 0.3);
X_train X_scaled(cv.training, :);
y_train y(cv.training, :);
X_test X_scaled(cv.test, :);
y_test y(cv.test, :);%% 使用高斯核SVM设置参数
svm_model fitcsvm(X_train, y_train, ...KernelFunction, RBF, ... % 高斯核BoxConstraint, 1, ... % 正则化参数C控制过拟合KernelScale, auto, ... % 自动计算核参数γStandardize, false); % 已手动标准化数据%% 预测测试集
[y_pred, scores] predict(svm_model, X_test);%%
%% 模型评估指标计算
% 1. 准确率 (Accuracy)
accuracy sum(y_pred y_test) / numel(y_test);% 2. 混淆矩阵
conf_mat confusionmat(y_test, y_pred);
TP conf_mat(2,2); % 真正例 (True Positive)
FP conf_mat(1,2); % 假正例 (False Positive)
FN conf_mat(2,1); % 假负例 (False Negative)% 3. 精确率 (Precision)
precision TP / (TP FP);% 4. 召回率 (Recall)
recall TP / (TP FN);% 5. F1-Score
f1_score 2 * (precision * recall) / (precision recall);% 6. 均方误差 (MSE) —— 基于预测概率需转换为0-1概率
% 注意SVM默认输出决策值需转换为概率MATLAB需训练后验概率模型
svm_model fitPosterior(svm_model); % 训练概率输出模型
[~, prob_estimates] predict(svm_model, X_test);
mse mean((prob_estimates(:,2) - y_test).^2); % 使用正类概率计算MSE% 7. R²值 (基于预测概率)
ss_total sum((y_test - mean(y_test)).^2);
ss_residual sum((y_test - prob_estimates(:,2)).^2);
r_squared 1 - (ss_residual / ss_total);%% 输出结果
fprintf( 模型评估指标 \n);
fprintf(准确率: %.2f%%\n, accuracy*100);
fprintf(精确率: %.2f%%\n, precision*100);
fprintf(召回率: %.2f%%\n, recall*100);
fprintf(F1-Score: %.2f\n, f1_score);
fprintf(均方误差 (MSE): %.4f\n, mse);
fprintf(R²值: %.4f\n\n, r_squared);
disp(混淆矩阵:);
disp(conf_mat);%% 绘制ROC曲线
figure;
[X_roc, Y_roc, ~, AUC] perfcurve(y_test, scores(:,2), 1);
plot(X_roc, Y_roc, LineWidth, 2);
xlabel(假正率 (FPR));
ylabel(真正率 (TPR));
title(sprintf(ROC曲线 (AUC %.2f), AUC));
grid on;参考资料
[1] 【数之道】支持向量机SVM是什么八分钟直觉理解其本质_哔哩哔哩_bilibili