尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

完整教程:机器学习入门,支持向量机

完整教程:机器学习入门,支持向量机
📅 发布时间:2026/6/19 20:41:46

完整教程:机器学习入门,支持向量机

原理简介

支持向量机寻找一个最优超平面来分隔不同类别的数据,目标是最大化边界(margin)——即超平面到最近数据点的距离。

场景:客户信用评分

● 问题描述:银行需要根据客户的收入(特征1)和负债(特征2)判断其信用等级(高风险/低风险)。
● 数据特点:
● 线性可分:客户数据分布存在明显分离边界(如 make_blobs 生成的两簇数据)。
● 小样本:数据量较小(100 个样本),适合 SVM 的小样本优势。

● 适用性:
●SVM 的线性核(kernel=‘linear’)适合低维且线性可分的数据。
● 若特征维度较高(如文本分类),可改用 RBF 核(kernel=‘rbf’)。

代码适配性

● 特征映射:X[:, 0] 和 X[:, 1] 可替换为客户收入和负债的标准化值。
● 标签映射:y 表示信用等级(0=高风险,1=低风险)。
● 输出结果:模型可预测新客户的信用等级,并通过决策边界直观展示风险分界。

模块化代码

将代码拆分为独立函数,提升可读性和复用性:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 1. 数据生成
def generate_data(n_samples=100, centers=2, cluster_std=1.0, random_state=42):
X, y = datasets.make_blobs(n_samples=n_samples, centers=centers,
cluster_std=cluster_std, random_state=random_state)
return X, y
# 2. 数据划分
def split_data(X, y, test_size=0.2, random_state=42):
return train_test_split(X, y, test_size=test_size, random_state=random_state)
# 3. 模型训练
def train_svm(X_train, y_train, kernel='linear', C=1.0):
model = SVC(kernel=kernel, C=C)
model.fit(X_train, y_train)
return model
# 4. 模型评估
def evaluate_model(model, X_test, y_test):
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"SVM 准确率: {accuracy:.2f
}")
return y_pred, accuracy
# 5. 可视化结果
def plot_svm_result(X, y, model):
plt.figure(figsize=(10, 6))
plt.rcParams['font.sans-serif'] = ['Hiragino Sans GB'] # 指定默认字体为黑体
plt.rcParams['axes.unicode_minus'] = False # 解决负号 '-' 显示为方块的问题
# 绘制数据点
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis', s=50, alpha=0.8)
# 创建网格绘制决策边界
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
Z = model.decision_function(xy).reshape(XX.shape)
# 绘制决策边界和间隔
ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1],
alpha=0.5, linestyles=['--', '-', '--'])
# 标记支持向量
ax.scatter(model.support_vectors_[:, 0], model.support_vectors_[:, 1],
s=100, linewidth=1, facecolors='none', edgecolors='k')
plt.title('SVM 分类结果 (支持向量已圈出)')
plt.xlabel('特征1')
plt.ylabel('特征2')
plt.show()
# 主程序
def main():
# 数据生成
X, y = generate_data()
# 数据划分
X_train, X_test, y_train, y_test = split_data(X, y)
# 模型训练
svm_model = train_svm(X_train, y_train)
# 模型评估
y_pred, accuracy = evaluate_model(svm_model, X_test, y_test)
# 可视化
plot_svm_result(X, y, svm_model)
if __name__ == "__main__":
main()

代码结果

SVM 准确率: 1.00

在这里插入图片描述

附加说明

准确率公式

在这里插入图片描述

其中:
TP(True Positive):正类预测为正类(正确)。
TN(True Negative):负类预测为负类(正确)。
FP(False Positive):负类预测为正类(错误)。
FN(False Negative):正类预测为负类(错误)。

计算准确率

方法1:依托现成函数

上述代码中的计算准确率使用的是现成的方法:
accuracy = accuracy_score(y_test, y_pred)

方法2:手工计算

● 对比预测值与真实值:

pythoncorrect = sum(y_pred == y_test) # 正确预测的数量
total = len(y_test) # 总样本数

● 计算准确率:

pythonaccuracy = correct / total

相关新闻

  • [PaperReading] Qwen2-VL: Enhancing Vision-Language Model’s Perception of the World at Any Resolution
  • 总线的性能指标
  • VoxCPM:新一代高拟真语音生成模型

最新新闻

  • 2026海口名表回收行情解析!哪些款式保值抗跌?避坑指南速看 - 奢品小当家
  • Moteus:当开源精神遇见高性能无刷伺服控制
  • 2026年6月卧式潜水泵厂家推荐 - 多才菠萝
  • 2026 桂林防水补漏靠谱服务商盘点:屋面 / 厨卫 / 外墙 / 地下室渗水维修详解,适配桂北喀斯特山水防潮防水甄选指南 - 宅安选房屋修缮
  • 题解:P16881 [GKS 2022 #D] Image Labeler
  • 微积分基石:从连续、可导到洛必达法则,厘清概念差异与实战边界

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号