宿迁建设局网站,汕头网站制作找谁,商城网站的seo优化改怎么做,工商执照查询官网场景
假设我们要在一个在线零售平台上自动区分商品评论是正面的还是负面的。评论中的语言多种多样#xff0c;且往往含有大量的非结构化文本数据#xff0c;直接使用简单的规则来分类是非常困难。这时候我们采取支持向量机算法来分类是一个比较好的选择。
支持向量机
支持…场景
假设我们要在一个在线零售平台上自动区分商品评论是正面的还是负面的。评论中的语言多种多样且往往含有大量的非结构化文本数据直接使用简单的规则来分类是非常困难。这时候我们采取支持向量机算法来分类是一个比较好的选择。
支持向量机
支持向量机SVM是一种强大的监督学习算法用于分类和回归分析。其核心思想是找到一个最优的超平面以此来区分不同类别的数据点。SVM特别适合中小型复杂数据集的分类问题。 给左右的点使用一条直线划分明显可以得出第四个的效果明显比另外两条线好很多。
核心概念
支持向量机SVM的心脏部位——最优超平面和核技巧。
最优超平面
想象咱们是一群寻宝者在宝藏岛上寻找金银财宝。岛上有两个洞穴一个藏金币一个藏银币。咱们的目标是用最少的线索找到一条线能够把金币洞穴和银币洞穴分开。这条线就是SVM中的最优超平面它的特点是能最大程度上把两类宝藏分开让咱们的分类任务清晰又精准。
核技巧 神秘的地图
在海上航行核函数就像是咱们的神秘地图能揭示隐藏在平静海面下的秘密通道。通过使用不同的核函数咱们可以发现数据之间复杂的关系就像找到了通往宝藏的秘密通道。
线性核这就像是直接向宝藏岛行驶适用于宝藏就藏在不远的海岛上的情况。 多项式核通过提升到高维空间它可以帮助咱们在看似复杂的海域中找到通向宝藏的路径适用于宝藏被隐藏得比较深的情况。 径向基RBF核也就是高斯核这是最强大的一张地图它能揭示出最隐秘的通道哪怕宝藏被隐藏在最复杂的地形之下。
惩罚因子 C调节风帆
想象一下咱们的船在大海上航行惩罚因子 C 就像是调节风帆的绳索。如果咱们拉紧绳索即提高 C 值风帆会紧绷船就会更精确地追随风向尽可能不偏离航线哪怕是小小的风浪数据噪声也想避开。但这样做的风险是一旦遇到大风浪过拟合船可能就控制不住了。如果咱们放松绳索即降低C 值风帆会松弛船虽然不会那么精确追随每一阵风但在大风浪面前能更灵活地调整保持航行避免过拟合哪怕航线上有点小偏差允许一些错误分类。
松弛变量 ξ接纳乘客的弹性
想象咱们的船只在收容乘客。松弛变量 ξ 就好比是咱们对乘客数据点的容纳度。有些乘客可能不完全符合咱们的乘客标准比如穿着不整齐的但为了整体的航行目标比如分类的正确性咱们可以选择稍微放宽标准容纳他们上船。通过调整松弛变量咱们可以决定容纳这些不符合标准乘客的程度。但记住每个不符合标准的乘客都需要支付额外的金币惩罚以确保他们尽量不影响航行的整体目标。
指标航行的星辰
在咱们的航海中性能指标就像是指引方向的星辰。它们告诉咱们航行的准确性、效率、以及咱们是否正朝着正确的方向前进。常见的指标包括准确率咱们正确预测的比例、召回率在所有正样本中咱们正确找到的比例以及F1分数准确率和召回率的调和平均用来平衡两者的性能。
最终目标
通过使用这些工具和参照这些指标咱们就能在数据的大海中找到通往知识宝藏的路径。记住选择正确的工具和正确解读指标是达到目的地的关键
手写图片识别工具
步骤概览
数据准备加载图片数据对数据进行预处理和标准化。 特征提取将图片转换为适合机器学习模型处理的格式。 训练测试分割将数据集分为训练集和测试集。 模型训练使用SVM训练模型。 模型评估评估模型在测试集上的表现。 参数调优通过调整SVM参数来优化模型性能。
加载预处理 def load_images(image_dir, image_size, n_samples):images np.zeros((n_samples, image_size[0] * image_size[1]))labels np.zeros(n_samples)for i, file in enumerate(os.listdir(image_dir)[:n_samples]):# 读取图片转换为灰度img imread(os.path.join(image_dir, file), as_grayTrue)# 调整图片大小img_resized resize(img, image_size, anti_aliasingTrue).flatten()images[i] img_resizedlabels[i] get_label_from_filename(file) # 定义一个函数来从文件名获取标签print(labels[i])return images, labelsdef get_label_from_filename(filename):# 这里应该根据实际情况来实现如何从文件名获取标签return int(filename.split(_)[0])
加载
image_dir mnist_images # 图片文件夹路径
image_size (28, 28) # 图片大小
n_samples 100 #
X, y load_images(image_dir, image_size, n_samples)预处理零均值归一化处理
scaler StandardScaler()
X_scaled scaler.fit_transform(X)划分测评集
# 首先分割出训练集和一个临时测试集这里将20%的数据作为这个临时集合
X_train, X_temp, y_train, y_temp train_test_split(X_scaled, y, test_size0.2, random_state42)# 然后将这个临时测试集进一步分割为真正的测试集和验证集这里我们把它们各自占原始数据集的比例设置为10%
X_test, X_val, y_test, y_val train_test_split(X_temp, y_temp, test_size0.5, random_state42)我们首先保留了20%的数据作为非训练数据X_temp, y_temp这部分数据不会用于模型训练。然后我们把这20%的数据一分为二一半作为测试集X_test, y_test一半作为验证集X_val, y_val。这样训练集、测试集和验证集各自占原始数据集的80%、10%和10%。
模型训练
model SVC(kernelrbf, gamma0.001, C50)
model.fit(X_train, y_train)kernel参数指定了SVM内核函数的类型它用于将输入数据映射到高维空间‘rbf’高斯核。用于非线性可分的情况
gamma参数只对’rbf’、poly’和’sigmoid’核函数有影响。它定义了单个训练样本达到多大程度的远距离影响。具体来说gamma的值越大每个样本的影响范围就越小这会导致决策边界更加复杂可能导致过拟合。相反较小的gamma值意味着样本具有更大的影响范围导致决策边界更加平滑。
C惩罚因子较小的C值鼓励模型选择更简单的决策边界边界更平滑即使这会导致一些训练样本被分类错误。较大的C值会尝试正确分类所有训练样本即使这意味着决策边界更加复杂这可能会导致模型过拟合。
模型评估
算召回率Recall、精确度Precision等指标时average参数的选择对最终结果有重大影响。
1. averagemicro
作用先计算模型在所有类别上的总真正例、假正例和假反例然后用这些总数来计算总体的指标。
应用场景当你希望指标能反映出被分类为每个类别的样本的比例时特别适用于样本不平衡的情况。micro方法将所有类别的贡献视为相等主要关注的是每个样本是否被正确分类。
2. averagemacro
作用为每个类别单独计算指标然后计算这些指标的未加权平均值。这意味着所有类别都被视为同等重要不考虑它们在数据集中的比例。
应用场景当你认为每个类别都同等重要时无论它们的样本量大小。这适用于你希望模型在所有类别上表现均衡即使某些类别的样本数量较少。
3. averageweighted
作用为每个类别单独计算指标然后计算这些指标的加权平均值权重与每个类别的真实样本数量成比例。这意味着较多样本的类别在总体指标中占有更大的比重。
应用场景适用于你更关心多数样本的类别特别是在样本不平衡时。它有助于反映模型在最多数类上的性能表现。
4. averagesamples仅适用于多标签问题
作用计算每个实例的指标然后取平均。这种方法仅适用于多标签分类问题。
应用场景当你的任务是多标签分类即一个样本可以同时属于多个类别时。# 预测和评估
# 打印验证集上的性能指标
print(性能评估验证集:)
print(classification_report(y_val, y_val_pred))# 假设基于验证集的评估结果你决定了最终的模型参数
# 现在使用测试集来评估最终模型的性能
y_test_pred model.predict(X_test)# 打印测试集上的性能指标
print(性能评估测试集:)
print(classification_report(y_test, y_test_pred))准确率Accuracy准确率是最直观的性能指标它衡量的是分类正确的样本占总样本数的比例。在处理不平衡数据集时它可能不是一个好的选择因为即使模型仅预测数量较多的类别准确率也可能很高。 召回率Recall召回率是在所有实际正类中被正确预测为正类的比例。它是对模型找回所有正样本能力的衡量。召回率越高意味着较少的实际正类被漏判为负类。公式为正确预测为正类的样本数/正类的样本数 精确度Precision精确度是在所有预测为正类的样本中实际为正类的比例。它衡量的是模型预测正类的准确性。在需要确保预测正类的质量较高的应用中精确度是一个关键的指标。
参数调优
实现自动化调参 对于超参数调整scikit-learn提供了GridSearchCV和RandomizedSearchCV等工具
全面搜索GridSearchCV通过遍历给定的参数网格中的所有参数组合来寻找最佳的超参数。这意味着如果你提供了大量的参数和/或参数值它将尝试这些参数的每一种可能组合。
计算成本由于需要遍历所有可能的参数组合所以当参数空间很大时GridSearchCV可能会非常耗时。
结果它保证能找到参数空间中的最佳组合假设在给定的参数网格中。
使用场景当参数空间相对较小且计算资源充足时使用GridSearchCV比较合适。
RandomizedSearchCV
随机搜索RandomizedSearchCV通过从指定的参数分布中随机采样参数组合进行搜索。你可以设定一个预算比如迭代次数它将在这个预算下随机选择参数组合进行尝试。
计算成本相比于GridSearchCVRandomizedSearchCV通常更快因为它不需要尝试所有可能的参数组合而是随机选取。
结果虽然RandomizedSearchCV不能保证找到参数空间中的最佳组合但在实践中它往往能够在合理的时间内找到非常好的结果特别是在某些参数对模型性能的影响远大于其他参数的情况下。
使用场景当参数空间很大或者计算资源有限时RandomizedSearchCV是一个更好的选择。如果你确切知道哪些参数范围是重要的并且参数空间相对较小GridSearchCV可以全面地搜索这些参数以找到最优解。 如果参数空间很大你想在有限的时间内找到一个“足够好”的解或者当某些参数对模型性能的影响显著大于其他参数时RandomizedSearchCV是一个更高效的选择。
# 设置参数网格
param_grid {C: [0.1, 1, 10, 100], gamma: [1, 0.1, 0.01, 0.001], kernel: [rbf, linear]}# 创建网格搜索对象
grid GridSearchCV(SVC(), param_grid, refitTrue, verbose2)
grid.fit(X_val, y_val)# 查看最佳参数
# 设置参数网格
param_grid {C: [0.1, 1, 10, 100], gamma: [1, 0.1, 0.01, 0.001], kernel: [rbf, linear]}
# 创建网格搜索对象这里我们使用训练集和验证集进行网格搜索
# 注意可以通过交叉验证在训练集上自动分割出验证集这样不需要手动分割验证集
grid GridSearchCV(SVC(), param_grid, refitTrue, verbose2, cv5)
grid.fit(X_train, y_train)
# 查看最佳参数
print(最佳参数, grid.best_params_)
# 使用找到的最佳参数创建新的SVM模型
best_model grid.best_estimator_# 首先在验证集上进行评估验证集用于模型选择和调参已经通过交叉验证间接使用
y_val_pred best_model.predict(X_val)
print(性能评估验证集:)
print(classification_report(y_val, y_val_pred))# 现在使用测试集来评估最终模型的性能
y_test_pred best_model.predict(X_test)
print(性能评估测试集:)
print(classification_report(y_test, y_test_pred))查看结果
训练下来结果如下
Fitting 5 folds for each of 32 candidates, totalling 160 fits
[CV] END .........................C0.1, gamma1, kernelrbf; total time 0.0s
[CV] END .........................C0.1, gamma1, kernelrbf; total time 0.0s
D:\herche_study\herche_py_study\djongo_demo\Lib\site-packages\sklearn\model_selection\_split.py:737: UserWarning: The least populated class in y has only 4 members, which is less than n_splits5.warnings.warn(
[CV] END .........................C0.1, gamma1, kernelrbf; total time 0.0s
[CV] END .........................C0.1, gamma1, kernelrbf; total time 0.0s
[CV] END .........................C0.1, gamma1, kernelrbf; total time 0.0s
[CV] END ......................C0.1, gamma1, kernellinear; total time 0.0s
[CV] END ......................C0.1, gamma1, kernellinear; total time 0.0s
[CV] END ......................C0.1, gamma1, kernellinear; total time 0.0s
[CV] END ......................C0.1, gamma1, kernellinear; total time 0.0s
[CV] END ......................C0.1, gamma1, kernellinear; total time 0.0s
[CV] END .......................C0.1, gamma0.1, kernelrbf; total time 0.0s
[CV] END .......................C0.1, gamma0.1, kernelrbf; total time 0.0s
[CV] END .......................C0.1, gamma0.1, kernelrbf; total time 0.0s
[CV] END .......................C0.1, gamma0.1, kernelrbf; total time 0.0s
[CV] END .......................C0.1, gamma0.1, kernelrbf; total time 0.0s
[CV] END ....................C0.1, gamma0.1, kernellinear; total time 0.0s
[CV] END ....................C0.1, gamma0.1, kernellinear; total time 0.0s
[CV] END ....................C0.1, gamma0.1, kernellinear; total time 0.0s
[CV] END ....................C0.1, gamma0.1, kernellinear; total time 0.0s
[CV] END ....................C0.1, gamma0.1, kernellinear; total time 0.0s
[CV] END ......................C0.1, gamma0.01, kernelrbf; total time 0.0s
[CV] END ......................C0.1, gamma0.01, kernelrbf; total time 0.0s
[CV] END ......................C0.1, gamma0.01, kernelrbf; total time 0.0s
[CV] END ......................C0.1, gamma0.01, kernelrbf; total time 0.0s
[CV] END ......................C0.1, gamma0.01, kernelrbf; total time 0.0s
[CV] END ...................C0.1, gamma0.01, kernellinear; total time 0.0s
[CV] END ...................C0.1, gamma0.01, kernellinear; total time 0.0s
[CV] END ...................C0.1, gamma0.01, kernellinear; total time 0.0s
[CV] END ...................C0.1, gamma0.01, kernellinear; total time 0.0s
[CV] END ...................C0.1, gamma0.01, kernellinear; total time 0.0s
[CV] END .....................C0.1, gamma0.001, kernelrbf; total time 0.0s
[CV] END .....................C0.1, gamma0.001, kernelrbf; total time 0.0s
[CV] END .....................C0.1, gamma0.001, kernelrbf; total time 0.0s
[CV] END .....................C0.1, gamma0.001, kernelrbf; total time 0.0s
[CV] END .....................C0.1, gamma0.001, kernelrbf; total time 0.0s
[CV] END ..................C0.1, gamma0.001, kernellinear; total time 0.0s
[CV] END ..................C0.1, gamma0.001, kernellinear; total time 0.0s
[CV] END ..................C0.1, gamma0.001, kernellinear; total time 0.0s
[CV] END ..................C0.1, gamma0.001, kernellinear; total time 0.0s
[CV] END ..................C0.1, gamma0.001, kernellinear; total time 0.0s
[CV] END ...........................C1, gamma1, kernelrbf; total time 0.0s
[CV] END ...........................C1, gamma1, kernelrbf; total time 0.0s
[CV] END ...........................C1, gamma1, kernelrbf; total time 0.0s
[CV] END ...........................C1, gamma1, kernelrbf; total time 0.0s
[CV] END ...........................C1, gamma1, kernelrbf; total time 0.0s
[CV] END ........................C1, gamma1, kernellinear; total time 0.0s
[CV] END ........................C1, gamma1, kernellinear; total time 0.0s
[CV] END ........................C1, gamma1, kernellinear; total time 0.0s
[CV] END ........................C1, gamma1, kernellinear; total time 0.0s
[CV] END ........................C1, gamma1, kernellinear; total time 0.0s
[CV] END .........................C1, gamma0.1, kernelrbf; total time 0.0s
[CV] END .........................C1, gamma0.1, kernelrbf; total time 0.0s
[CV] END .........................C1, gamma0.1, kernelrbf; total time 0.0s
[CV] END .........................C1, gamma0.1, kernelrbf; total time 0.0s
[CV] END .........................C1, gamma0.1, kernelrbf; total time 0.0s
[CV] END ......................C1, gamma0.1, kernellinear; total time 0.0s
[CV] END ......................C1, gamma0.1, kernellinear; total time 0.0s
[CV] END ......................C1, gamma0.1, kernellinear; total time 0.0s
[CV] END ......................C1, gamma0.1, kernellinear; total time 0.0s
[CV] END ......................C1, gamma0.1, kernellinear; total time 0.0s
[CV] END ........................C1, gamma0.01, kernelrbf; total time 0.0s
[CV] END ........................C1, gamma0.01, kernelrbf; total time 0.0s
[CV] END ........................C1, gamma0.01, kernelrbf; total time 0.0s
[CV] END ........................C1, gamma0.01, kernelrbf; total time 0.0s
[CV] END ........................C1, gamma0.01, kernelrbf; total time 0.0s
[CV] END .....................C1, gamma0.01, kernellinear; total time 0.0s
[CV] END .....................C1, gamma0.01, kernellinear; total time 0.0s
[CV] END .....................C1, gamma0.01, kernellinear; total time 0.0s
[CV] END .....................C1, gamma0.01, kernellinear; total time 0.0s
[CV] END .....................C1, gamma0.01, kernellinear; total time 0.0s
[CV] END .......................C1, gamma0.001, kernelrbf; total time 0.0s
[CV] END .......................C1, gamma0.001, kernelrbf; total time 0.0s
[CV] END .......................C1, gamma0.001, kernelrbf; total time 0.0s
[CV] END .......................C1, gamma0.001, kernelrbf; total time 0.0s
[CV] END .......................C1, gamma0.001, kernelrbf; total time 0.0s
[CV] END ....................C1, gamma0.001, kernellinear; total time 0.0s
[CV] END ....................C1, gamma0.001, kernellinear; total time 0.0s
[CV] END ....................C1, gamma0.001, kernellinear; total time 0.0s
[CV] END ....................C1, gamma0.001, kernellinear; total time 0.0s
[CV] END ....................C1, gamma0.001, kernellinear; total time 0.0s
[CV] END ..........................C10, gamma1, kernelrbf; total time 0.0s
[CV] END ..........................C10, gamma1, kernelrbf; total time 0.0s
[CV] END ..........................C10, gamma1, kernelrbf; total time 0.0s
[CV] END ..........................C10, gamma1, kernelrbf; total time 0.0s
[CV] END ..........................C10, gamma1, kernelrbf; total time 0.0s
[CV] END .......................C10, gamma1, kernellinear; total time 0.0s
[CV] END .......................C10, gamma1, kernellinear; total time 0.0s
[CV] END .......................C10, gamma1, kernellinear; total time 0.0s
[CV] END .......................C10, gamma1, kernellinear; total time 0.0s
[CV] END .......................C10, gamma1, kernellinear; total time 0.0s
[CV] END ........................C10, gamma0.1, kernelrbf; total time 0.0s
[CV] END ........................C10, gamma0.1, kernelrbf; total time 0.0s
[CV] END ........................C10, gamma0.1, kernelrbf; total time 0.0s
[CV] END ........................C10, gamma0.1, kernelrbf; total time 0.0s
[CV] END ........................C10, gamma0.1, kernelrbf; total time 0.0s
[CV] END .....................C10, gamma0.1, kernellinear; total time 0.0s
[CV] END .....................C10, gamma0.1, kernellinear; total time 0.0s
[CV] END .....................C10, gamma0.1, kernellinear; total time 0.0s
[CV] END .....................C10, gamma0.1, kernellinear; total time 0.0s
[CV] END .....................C10, gamma0.1, kernellinear; total time 0.0s
[CV] END .......................C10, gamma0.01, kernelrbf; total time 0.0s
[CV] END .......................C10, gamma0.01, kernelrbf; total time 0.0s
[CV] END .......................C10, gamma0.01, kernelrbf; total time 0.0s
[CV] END .......................C10, gamma0.01, kernelrbf; total time 0.0s
[CV] END .......................C10, gamma0.01, kernelrbf; total time 0.0s
[CV] END ....................C10, gamma0.01, kernellinear; total time 0.0s
[CV] END ....................C10, gamma0.01, kernellinear; total time 0.0s
[CV] END ....................C10, gamma0.01, kernellinear; total time 0.0s
[CV] END ....................C10, gamma0.01, kernellinear; total time 0.0s
[CV] END ....................C10, gamma0.01, kernellinear; total time 0.0s
[CV] END ......................C10, gamma0.001, kernelrbf; total time 0.0s
[CV] END ......................C10, gamma0.001, kernelrbf; total time 0.0s
[CV] END ......................C10, gamma0.001, kernelrbf; total time 0.0s
[CV] END ......................C10, gamma0.001, kernelrbf; total time 0.0s
[CV] END ......................C10, gamma0.001, kernelrbf; total time 0.0s
[CV] END ...................C10, gamma0.001, kernellinear; total time 0.0s
[CV] END ...................C10, gamma0.001, kernellinear; total time 0.0s
[CV] END ...................C10, gamma0.001, kernellinear; total time 0.0s
[CV] END ...................C10, gamma0.001, kernellinear; total time 0.0s
[CV] END ...................C10, gamma0.001, kernellinear; total time 0.0s
[CV] END .........................C100, gamma1, kernelrbf; total time 0.0s
[CV] END .........................C100, gamma1, kernelrbf; total time 0.0s
[CV] END .........................C100, gamma1, kernelrbf; total time 0.0s
[CV] END .........................C100, gamma1, kernelrbf; total time 0.0s
[CV] END .........................C100, gamma1, kernelrbf; total time 0.0s
[CV] END ......................C100, gamma1, kernellinear; total time 0.0s
[CV] END ......................C100, gamma1, kernellinear; total time 0.0s
[CV] END ......................C100, gamma1, kernellinear; total time 0.0s
[CV] END ......................C100, gamma1, kernellinear; total time 0.0s
[CV] END ......................C100, gamma1, kernellinear; total time 0.0s
[CV] END .......................C100, gamma0.1, kernelrbf; total time 0.0s
[CV] END .......................C100, gamma0.1, kernelrbf; total time 0.0s
[CV] END .......................C100, gamma0.1, kernelrbf; total time 0.0s
[CV] END .......................C100, gamma0.1, kernelrbf; total time 0.0s
[CV] END .......................C100, gamma0.1, kernelrbf; total time 0.0s
[CV] END ....................C100, gamma0.1, kernellinear; total time 0.0s
[CV] END ....................C100, gamma0.1, kernellinear; total time 0.0s
[CV] END ....................C100, gamma0.1, kernellinear; total time 0.0s
[CV] END ....................C100, gamma0.1, kernellinear; total time 0.0s
[CV] END ....................C100, gamma0.1, kernellinear; total time 0.0s
[CV] END ......................C100, gamma0.01, kernelrbf; total time 0.0s
[CV] END ......................C100, gamma0.01, kernelrbf; total time 0.0s
[CV] END ......................C100, gamma0.01, kernelrbf; total time 0.0s
[CV] END ......................C100, gamma0.01, kernelrbf; total time 0.0s
[CV] END ......................C100, gamma0.01, kernelrbf; total time 0.0s
[CV] END ...................C100, gamma0.01, kernellinear; total time 0.0s
[CV] END ...................C100, gamma0.01, kernellinear; total time 0.0s
[CV] END ...................C100, gamma0.01, kernellinear; total time 0.0s
[CV] END ...................C100, gamma0.01, kernellinear; total time 0.0s
[CV] END ...................C100, gamma0.01, kernellinear; total time 0.0s
[CV] END .....................C100, gamma0.001, kernelrbf; total time 0.0s
[CV] END .....................C100, gamma0.001, kernelrbf; total time 0.0s
[CV] END .....................C100, gamma0.001, kernelrbf; total time 0.0s
[CV] END .....................C100, gamma0.001, kernelrbf; total time 0.0s
[CV] END .....................C100, gamma0.001, kernelrbf; total time 0.0s
[CV] END ..................C100, gamma0.001, kernellinear; total time 0.0s
[CV] END ..................C100, gamma0.001, kernellinear; total time 0.0s
[CV] END ..................C100, gamma0.001, kernellinear; total time 0.0s
[CV] END ..................C100, gamma0.001, kernellinear; total time 0.0s
[CV] END ..................C100, gamma0.001, kernellinear; total time 0.0s
最佳参数 {C: 10, gamma: 0.001, kernel: rbf}
性能评估验证集:precision recall f1-score support0.0 0.75 1.00 0.86 32.0 0.00 0.00 0.00 13.0 1.00 1.00 1.00 14.0 1.00 1.00 1.00 27.0 1.00 1.00 1.00 28.0 1.00 1.00 1.00 1accuracy 0.90 10macro avg 0.79 0.83 0.81 10
weighted avg 0.82 0.90 0.86 10性能评估测试集:
D:\herche_study\herche_py_study\djongo_demo\Lib\site-packages\sklearn\metrics\_classification.py:1471: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use zero_division parameter to control this behavior._warn_prf(average, modifier, msg_start, len(result))
D:\herche_study\herche_py_study\djongo_demo\Lib\site-packages\sklearn\metrics\_classification.py:1471: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use zero_division parameter to control this behavior._warn_prf(average, modifier, msg_start, len(result))
D:\herche_study\herche_py_study\djongo_demo\Lib\site-packages\sklearn\metrics\_classification.py:1471: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use zero_division parameter to control this behavior._warn_prf(average, modifier, msg_start, len(result))precision recall f1-score support0.0 1.00 1.00 1.00 11.0 1.00 1.00 1.00 22.0 1.00 1.00 1.00 13.0 1.00 1.00 1.00 14.0 1.00 1.00 1.00 16.0 1.00 1.00 1.00 17.0 1.00 1.00 1.00 29.0 1.00 1.00 1.00 1accuracy 1.00 10macro avg 1.00 1.00 1.00 10
weighted avg 1.00 1.00 1.00 10验证模型
保存模型
model_filename best_model.joblib
dump(best_model, model_filename)验证模型我们下载了100个测试数据
用于验证这个模型的性能
X,y load_images(test_images,(28, 28),100)
scaler StandardScaler()
X_scaled scaler.fit_transform(X)
loaded_model load(best_model.joblib)
# 使用加载的模型进行预测
y_pred loaded_model.predict(X_scaled)
# 计算准确率
print(性能评估验证集:)
print(classification_report(y, y_pred))结果是
性能评估验证集:precision recall f1-score support0.0 0.80 1.00 0.89 81.0 0.85 0.92 0.88 122.0 0.88 0.50 0.64 143.0 0.83 1.00 0.91 104.0 0.82 0.90 0.86 105.0 0.80 0.50 0.62 86.0 0.78 0.88 0.82 87.0 1.00 0.91 0.95 118.0 1.00 0.71 0.83 79.0 0.71 1.00 0.83 12accuracy 0.83 100macro avg 0.85 0.83 0.82 100
weighted avg 0.84 0.83 0.82 100
这个性能评估报告提供了模型在验证集上对于一个十类分类问题的详细性能分析。这里的验证集共有100个样本。
各类的表现
类别0至类别9报告显示了每个类别的精确度Precision、召回率Recall和F1分数F1 Score。精确度衡量的是模型预测为该类别的样本中实际属于该类别的比例召回率衡量的是实际属于该类别的样本中被模型正确预测的比例F1分数是精确度和召回率的调和平均用于评价模型的综合性能。类别2和类别5这两个类别的召回率相对较低分别为0.50意味着模型错过了一半实际属于这些类别的样本。类别2的精确度相对较高0.88而类别5的精确度0.80说明在预测为这个类别的样本中有20%实际不属于此类。类别8和类别9尽管这两个类别的精确度非常高分别为1.00和0.71但它们的召回率不是很平衡特别是类别8的召回率只有0.71意味着有约29%的实际属于类别8的样本被模型错过了。总结
这个模型在多数类别上表现良好特别是一些类别达到了很高的精确度和召回率。但是对于某些类别如类别2和类别5模型在召回率上的表现不足这可能指出模型对这些类别的识别存在困难。这可能是由于样本不足、特征不明显或类间差异不大等原因造成的。结束
(当使用SVC()类创建SVM模型并调用.fit(X_train, y_train)方法进行训练时SVM算法会自动寻找最大化边界间隔的超平面。这个过程包括确定哪些训练样本作为支持向量以及如何通过这些支持向量来定义最优的决策边界。这一部分是SVM算法的内部机制不需要开发者手动实现。间隔是决策边界与最近的训练样本之间的距离这些最近的样本就是支持向量。SVM模型通过最大化这个间隔来提高模型的泛化能力。在SVC()类中参数C起到控制误差的权重间接影响间隔大小的作用。较小的C值允许较大的间隔提高模型的泛化能力而较大的C值会尽量减少误分类但可能导致间隔变小增加过拟合的风险。)
优点 效果好在许多实际应用中特别是在维度较高的数据集上SVM常常表现出优秀的性能。 泛化能力强通过最大化间隔SVM能够提高模型的泛化能力降低过拟合的风险。 灵活性通过选择合适的核函数SVM可以很好地处理线性和非线性数据。
缺点 计算开销对于大规模数据集SVM的训练时间可能会比较长。 参数选择SVM的性能高度依赖于核函数参数如RBF核的γ和正则化参数C的选择。不恰当的参数设置可能导致模型过拟合或欠拟合。 结果解释性与一些简单模型如决策树相比SVM模型的结果解释性较差。
应用 分类任务SVM最常用于分类问题尤其是二分类问题。 回归任务通过引入ε-不敏感损失函数SVM也可以用于回归任务称为SVR。 异常检测SVM的一个变种可以用于异常检测任务。
支持向量机是一种强大的学习算法适用于各种机器学习任务。通过合理选择核函数和调整参数SVM可以在多种数据集上实现高精度的模型性能。