支持向量机算法:原理、实现与应用

news2024/12/26 19:59:20

摘要: 本文深入探讨支持向量机(Support Vector Machine,SVM)算法,详细阐述其原理、数学模型、核函数机制以及在分类和回归问题中的应用方式。通过以 Python 和 C# 为例,展示 SVM 算法在不同编程环境下的具体实现步骤,包括数据准备、模型构建、训练与评估等过程。同时,讨论 SVM 算法的优势、局限性以及在实际领域如数据分类、图像识别、生物信息学等中的应用案例,旨在为读者全面呈现 SVM 算法的全貌,使其能够深入理解并在相关领域中有效应用该算法。

一、引言

在机器学习领域,支持向量机算法是一种极具影响力且广泛应用的监督学习算法。它在数据分类、回归分析以及异常检测等任务中都展现出卓越的性能。SVM 算法基于统计学习理论,通过寻找一个最优的超平面来对数据进行分类或回归预测,其核心思想是最大化分类间隔,使得分类结果具有良好的泛化能力。无论是在学术研究还是工业应用中,SVM 都占据着重要的地位,例如在图像识别中对图像中的物体进行分类,在生物信息学中对基因数据进行分析和预测等。本文将详细介绍 SVM 算法的原理、实现及应用,以帮助读者深入理解这一重要的机器学习工具。

二、支持向量机算法原理

(一)线性可分情况

在线性可分的情况下,SVM的目标是找到一个超平面,使得该超平面到最近的数据点的距离(称为间隔)最大化。这个间隔最大化问题可以转化为一个凸二次规划问题,通过求解这个凸二次规划问题,可以得到唯一的超平面和相应的分类决策函数‌。支持向量是那些距离超平面最近的样本点,它们决定了超平面的位置和方向‌。

(二)线性不可分情况与核函数

当数据集线性不可分时,SVM引入了核函数的概念。核函数可以将数据映射到高维空间,使得在高维空间中数据变得线性可分。常用的核函数包括多项式核函数、高斯核函数(RBF核)和Sigmoid核函数。通过核函数,SVM可以在高维空间中找到一个最优的超平面进行分类‌。

(三)支持向量

在SVM中,支持向量是那些距离超平面最近的样本点。这些点决定了超平面的位置和方向。在训练过程中,只有支持向量对最终的分类结果有影响,其他的数据点对分类器的训练没有贡献‌。

三、Python 实现支持向量机算法

(一)环境搭建与数据准备

  1. 安装相关库
    在 Python 中,常用的机器学习库 scikit-learn 提供了 SVM 算法的实现。可以使用 pip 命令安装:
pip install scikit-learn
  1. 数据准备
    以经典的鸢尾花数据集为例,该数据集包含三种不同类型的鸢尾花(Setosa、Versicolor 和 Virginica)的花瓣和花萼的长度与宽度信息。scikit-learn 库中已经内置了该数据集,可以直接使用。
from sklearn.datasets import load_iris
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target

这里,X 是特征矩阵,每一行代表一个样本,每一列代表一个特征(如花瓣长度、花瓣宽度等);y 是目标向量,存储了每个样本对应的类别标签。

(二)模型构建与训练

使用 scikit-learn 中的 SVC(支持向量分类器)类来构建 SVM 分类模型,并对数据进行训练。

from sklearn.svm import SVC
# 创建 SVM 分类器对象,使用线性核函数
svm = SVC(kernel='linear', C=1.0)
# 训练模型
svm.fit(X, y)

在上述代码中,kernel='linear' 表示使用线性核函数,C=1.0 是惩罚参数。可以根据实际情况调整核函数类型和惩罚参数的值。

(三)模型评估与预测

  1. 模型评估
    可以使用一些评估指标来衡量模型的性能,如准确率(Accuracy)。将数据集划分为训练集和测试集,使用训练集训练模型,然后在测试集上进行评估。
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 重新训练模型
svm.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = svm.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
  1. 模型预测
    对于新的数据,可以使用训练好的模型进行预测。例如,假设有一个新的鸢尾花样本,其特征为 [5.1, 3.5, 1.4, 0.2](花瓣长度、花瓣宽度、花萼长度、花萼宽度),可以使用以下代码进行预测:
new_sample = [[5.1, 3.5, 1.4, 0.2]]
predicted_class = svm.predict(new_sample)
print("Predicted class:", iris.target_names[predicted_class[0]])

这里,predicted_class 是预测的类别索引,通过 iris.target_names 可以获取对应的类别名称。

(四)使用不同核函数

  1. 多项式核函数
    如果要使用多项式核函数,可以在创建 SVC 对象时设置 kernel='poly',并可以指定多项式的次数 degree。例如:
# 创建 SVM 分类器对象,使用多项式核函数,次数为 3
svm_poly = SVC(kernel='poly', degree=3, C=1.0)
svm_poly.fit(X, y)
  1. 高斯径向基核函数
    对于高斯径向基核函数,设置 kernel='rbf',并可以调整参数 gamma。例如:
# 创建 SVM 分类器对象,使用高斯径向基核函数,gamma=0.7
svm_rbf = SVC(kernel='rbf', gamma=0.7, C=1.0)
svm_rbf.fit(X, y)

四、C# 实现支持向量机算法

(一)环境搭建与数据准备

  1. 创建项目与安装包
    在 C# 中,可以使用 Accord.NET 库来实现 SVM 算法。首先创建一个新的 C# 项目,然后通过 NuGet 包管理器安装 Accord.MachineLearning 和 Accord.Statistics.Kernels 包。
  2. 数据准备
    同样以鸢尾花数据集为例,不过需要将数据转换为 C# 中的数据结构。可以创建一个类来表示鸢尾花的数据样本:
public class IrisData
{
    public float SepalLength { get; set; }
    public float SepalWidth { get; set; }
    public float PetalLength { get; set) { get; set; }
    public float PetalWidth { get; set; }
    public int Label { get; set; }
}

然后读取数据集文件(假设数据集存储在一个 CSV 文件中)并将其转换为 IrisData 类型的列表。

using System;
using System.Collections.Generic;
using System.IO;
using Accord.MachineLearning;
using Accord.Statistics.Kernels;

class Program
{
    static readonly string _dataPath = "iris.csv";

    static void Main()
    {
        // 读取数据集
        var data = new List<IrisData>();
        using (var reader = new StreamReader(_dataPath))
        {
            // 跳过标题行
            reader.ReadLine();
            string line;
            while ((line = reader.ReadLine())!= null)
            {
                var values = line.Split(',');
                var sample = new IrisData
                {
                    SepalLength = float.Parse(values[0]),
                    SepalWidth = float.Parse(values[1]),
                    PetalLength = float.Parse(values[2]),
                    PetalWidth = float.Parse(values[3]),
                    Label = int.Parse(values[4])
                };
                data.Add(sample);
            }
        }
    }
}

(二)模型构建与训练

使用 Accord.NET 构建 SVM 分类模型并进行训练。

// 创建输入和输出数组
double[][] inputs = new double[data.Count][];
int[] outputs = new int[data.Count];

for (int i = 0; i < data.Count; i++)
{
    inputs[i] = new double[] { data[i].SepalLength, data[i].SepalWidth, data[i].PetalLength, data[i].PetalWidth };
    outputs[i] = data[i].Label;
}

// 创建 SVM 学习器,使用线性核函数
var teacher = new SupportVectorMachineLearning<Linear>()
{
    // 设置惩罚参数
    Complexity = 1.0
};

// 训练模型
var svm = teacher.Learn(inputs, outputs);

在上述代码中,首先将数据转换为 Accord.NET 所需的数组格式,然后创建 SupportVectorMachineLearning 对象,指定线性核函数并设置惩罚参数,最后使用 Learn 方法训练模型。

(三)模型评估与预测

  1. 模型评估
    将数据集划分为训练集和测试集,在训练集上训练模型后,使用测试集对模型进行评估。可以使用准确率等指标进行评估。
// 划分训练集和测试集
var (trainInputs, testInputs, trainOutputs, testOutputs) = CrossValidation.Create(inputs, outputs, 0.2);

// 训练模型
var trainedSvm = teacher.Learn(trainInputs, trainOutputs);

// 在测试集上进行预测
int[] predictions = trainedSvm.Decide(testInputs);

// 计算准确率
double accuracy = new ZeroOneLoss(testOutputs).Loss(predictions);
Console.WriteLine($"Accuracy: {accuracy}");
  1. 模型预测
    对于新的数据样本,可以使用训练好的模型进行预测。
// 创建新的样本数据
var newSample = new double[] { 5.1, 3.5, 1.4, 0.2 };
// 进行预测
int predictedClass = svm.Decide(newSample);
Console.WriteLine($"Predicted class: {predictedClass}");

(四)使用不同核函数

  1. 多项式核函数
    如果要使用多项式核函数,在创建 SupportVectorMachineLearning 对象时指定 Polynomial 核函数,并可以设置多项式次数等参数。例如:
// 创建 SVM 学习器,使用多项式核函数,次数为 3
var teacherPoly = new SupportVectorMachineLearning<Polynomial>()
{
    // 设置惩罚参数
    Complexity = 1.0,
    Degree = 3
};
var svmPoly = teacherPoly.Learn(inputs, outputs);
  1. 高斯径向基核函数
    对于高斯径向基核函数,指定 Gaussian 核函数,并调整参数 Sigma。例如:
// 创建 SVM 学习器,使用高斯径向基核函数,Sigma=0.7
var teacherRbf = new SupportVectorMachineLearning<Gaussian>()
{
    // 设置惩罚参数
    Complexity = 1.0,
    Sigma = 0.7
};
var svmRbf = teacherRbf.Learn(inputs, outputs);

五、支持向量机算法的应用案例

(一)数据分类任务

  1. 文本分类
    在文本分类中,SVM 算法可用于将文档分类到不同的类别,如新闻分类(体育、政治、娱乐等)、邮件分类(垃圾邮件与正常邮件)等。首先将文本进行特征提取,例如使用词袋模型或 TF-IDF 方法将文本转换为特征向量,然后使用 SVM 算法对这些特征向量进行分类。由于 SVM 能够处理高维数据且具有较好的泛化能力,在文本分类任务中表现出色。
  2. 图像分类
    在图像识别领域,SVM 算法可以用于对图像中的物体进行分类。例如,将图像中的人脸分类为不同的表情(高兴、悲伤、愤怒等),或者将图像中的物体分类为不同的类别(汽车、飞机、动物等)。通常需要先对图像进行特征提取,如使用卷积神经网络(CNN)提取图像的特征图,然后将这些特征输入到 SVM 算法中进行分类。

(二)回归分析应用

  1. 时间序列预测
    在时间序列分析中,SVM 算法可用于预测未来的值。例如,预测股票价格、电力负荷需求等。将时间序列数据转换为特征向量,例如使用过去一段时间的数据作为特征来预测未来的值,然后使用 SVM 的回归模型进行预测。通过调整核函数和模型参数,可以适应不同的时间序列数据特点,提高预测的准确性。
  2. 生物数据建模
    在生物信息学中,SVM 回归模型可以用于建立生物数据之间的关系模型。例如,根据蛋白质的结构特征预测其活性,或者根据基因表达数据预测疾病的发生风险等。通过对大量生物数据的学习,SVM 回归模型能够挖掘出数据中的潜在关系,为生物医学研究提供有价值的信息。

六、支持向量机算法的优势与局限性

(一)优势

  1. 良好的泛化能力
    SVM 算法通过最大化分类间隔来构建模型,使得模型在处理新数据时能够保持较高的准确性,有效避免了过拟合问题。即使在数据量相对较小的情况下,只要数据具有一定的代表性,SVM 也能学习到数据的关键特征和模式,从而对未知数据进行可靠的预测或分类。例如在一些医学影像诊断应用中,训练数据可能有限,但 SVM 仍能基于已有的病例影像特征建立起较为精准的疾病分类模型,对新的患者影像进行有效判断,为医生提供辅助诊断建议,且在不同医疗机构的相似病例数据上都能展现出较好的适应性和准确性。
  2. 处理高维数据有效
    由于核函数的巧妙运用,SVM 能够在不直接计算高维特征空间向量内积的情况下处理高维数据。这一特性使其在面对诸如文本分类、图像识别等涉及大量特征的数据时游刃有余。以文本分类为例,使用词袋模型或 TF-IDF 等方法将文本转化为特征向量后,特征维度往往很高,但 SVM 可以借助核函数将这些高维特征映射到合适的空间进行分类决策,不会因维度灾难而导致性能急剧下降。在图像识别中,一幅图像经过特征提取后可能产生数以千计的特征值,SVM 依然能够利用核函数在这个高维特征空间中找到最优的分类超平面,准确区分不同类别的图像,如区分不同种类的动物图像或不同风格的艺术作品图像等。
  3. 全局最优解
    SVM 的优化问题是一个凸二次规划问题,这就保证了其能够找到全局最优解。相较于一些基于梯度下降等方法的算法可能陷入局部最优解的困境,SVM 在理论上能够确保所得到的模型是在给定条件下的最优模型。例如在一些复杂的工业生产过程质量控制场景中,需要精确地对产品质量进行分类判断,SVM 能够基于各种生产参数和质量检测指标数据找到全局最优的分类模型,从而准确地将合格产品与不合格产品区分开来,为企业生产决策提供可靠依据,避免因模型不准确而导致的误判和资源浪费。

(二)局限性

  1. 计算复杂度高
    当处理大规模数据集时,SVM 的计算复杂度会显著增加。无论是求解二次规划问题以确定支持向量和超平面参数,还是计算核函数矩阵,都需要消耗大量的计算资源和时间。例如在处理海量的互联网用户行为数据进行精准营销分类时,数据量可能达到数亿甚至数十亿条记录,SVM 的训练过程可能会耗费数小时甚至数天的时间,这在实际应用中往往是难以接受的。而且随着数据量的进一步增大,计算资源的需求呈指数级增长,可能导致普通计算机无法完成计算任务,需要借助大规模集群计算资源,这无疑增加了应用成本和技术难度。
  2. 对核函数和参数敏感
    核函数的选择以及相关参数(如惩罚参数 C、多项式核函数的次数 d、高斯径向基核函数的参数 γ 等)的设置对 SVM 的性能有着至关重要的影响。不同的核函数适用于不同类型的数据分布和问题场景,如果选择不当,可能导致模型性能不佳。例如在处理具有复杂非线性关系的数据时,若错误地选择了线性核函数,模型将无法准确捕捉数据的内在规律,分类或预测效果会大打折扣。同时,参数的调整也需要丰富的经验和大量的实验。以惩罚参数 C 为例,如果 C 设置过大,模型会过于关注训练数据的准确性,容易导致过拟合;而 C 设置过小,则可能使模型对错误分类过于宽容,导致泛化能力下降。在实际应用中,找到合适的核函数和参数组合往往需要反复尝试和优化,这增加了使用 SVM 算法的复杂性和不确定性。
  3. 不适用于多分类问题的直接处理
    SVM 原本是为二分类问题设计的,虽然有一些方法可以将其扩展到多分类问题,如一对一(One-vs-One)和一对多(One-vs-Rest)方法,但这些方法在一定程度上增加了计算复杂度和模型的复杂性。在一对一方法中,需要为每两个类别构建一个 SVM 分类器,对于 k 个类别,总共需要构建 k (k - 1)/2 个分类器,然后通过投票等方式确定最终的分类结果。在一对多方法中,需要为每个类别构建一个 SVM 分类器,将该类别与其他所有类别区分开来,总共需要构建 k 个分类器,同样需要额外的决策规则来确定最终类别。例如在对多种语言的文本进行分类时,若采用 SVM 算法,无论是一对一还是一对多方法,都需要构建多个二分类 SVM 模型并进行复杂的结果整合,这不仅增加了训练时间和计算资源消耗,还可能因为模型之间的相互影响而导致分类准确率有所下降。

尽管支持向量机算法存在上述局限性,但其在众多领域的成功应用以及在理论研究上的重要地位不可忽视。通过不断的研究和改进,如采用近似算法来降低大规模数据计算复杂度、开发自动化的核函数和参数选择方法以及优化多分类扩展策略等,SVM 算法有望在未来继续发挥重要作用,并在更广泛的领域得到更高效的应用。

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

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

相关文章

实测数据处理(BP算法处理)——SAR成像算法系列(九)

系列文章目录 《SAR学习笔记-SAR成像算法系列&#xff08;一&#xff09;》 《后向投影算法&#xff08;BPA&#xff09;-SAR成像算法系列&#xff08;二&#xff09;》 《后向投影算法&#xff08;续&#xff09;-SAR成像算法系列&#xff08;八&#xff09;》 文章目录 一…

(数据结构与算法)如何提高学习算法的效率?面试算法重点有哪些?面试需要哪些能力?

面试官眼中的求职者 通过对你算法的考察&#xff01;&#xff01;&#xff01;&#xff01; 缩进太多&#xff01;&#xff01;一般不要超过三层&#xff01;&#xff01;&#xff01;缩进越少&#xff0c;bug越少&#xff1b;逻辑比较复杂&#xff0c;把这些包装成为函数&…

Day05:缓存双写一致性

redis做为缓存&#xff0c;mysql的数据如何与redis进行同步呢&#xff1f;&#xff08;双写一致性–强一致&#xff09; 一种是一致性要求比较高的同步方案&#xff0c;另一种是允许延迟一致的异步通知。 什么是双写一致性&#xff1f; 双写一致性&#xff1a;当修改了数据库…

vue3+typescript自定义input组件

官方文档&#xff1a;https://cn.vuejs.org/guide/components/events#%E5%AE%9A%E4%B9%89%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BA%8B%E4%BB%B6 触发与监听事件​ 在组件的模板表达式中&#xff0c;可以直接使用 $emit 方法触发自定义事件 (例如&#xff1a;在 v-on 的处理函数中)…

代码之丑第一期-缩进

各位小伙伴们,大家好!咱今天就算是正式开张了。实不相瞒,第一期的内容早已写好,但唯独这开篇方式,笔者想了好些时间,包括但不限于如下风格: 斗破苍穹式(已经三刷):代码优雅之力,三段!级别:低级!百年孤独式(困扰于错综复杂的人物关系,放弃):多年以后,面对吐槽…

idea2024加载flowable6.8.1.36遇到的问题-idea启动flowable问题flowable源码启动问题

代码下载地址&#xff1a; https://gitee.com/hanpenghu_admin_admin/flowable6.8.1.git 1.首先是通过顶层目录maven clean install 发现很多子模块并不会install本地mavenStore库&#xff0c;这导致了&#xff0c;一堆相互依赖的模块报错找不到&#xff0c;所以需要根据报错…

Vue.js 中 v-for 指令的三种常见用法详解及key、value、id的作用

作者&#xff1a;CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境&#xff1a;WebStorm 目录 遍历数组 介绍 代码 遍历对象数组 介绍 代码 遍历对象本身 介绍 代码 效果呈现 key、value、id的作用 1. value 2. key 3. id 在 Vue.js 中&#xff0c…

【论文投稿】国产游戏技术:迈向全球引领者的征途

【IEEE出版南方科技大学】第十一届电气工程与自动化国际会议&#xff08;IFEEA 2024)_艾思科蓝_学术一站式服务平台 更多学术会议论文投稿请看&#xff1a;https://ais.cn/u/nuyAF3 目录 国产游戏技术能否引领全球&#xff1f; 一、国产游戏技术的崛起之路 1.1 初期探索与积…

React的ts文件中通过createElement拼接一段内容出来

比如接口返回一个值 const values [23.00, 40.00/kg];想做到如下效果&#xff0c; 如果单纯的用render渲染会很简单&#xff0c; 但是在ts文件中处理&#xff0c;所以采用了createElement拼接 代码如下&#xff1a; format: (values: string[]) > {if (!values || !val…

江协科技最新OLED保姆级移植hal库

江协科技最新OLED移植到hal库保姆级步骤 源码工程存档 工程和源码下载(密码 1i8y) 原因 江协科技的开源OLED封装的非常完美, 可以满足我们日常的大部分开发, 如果可以用在hal库 ,将是如虎添翼, 为我们开发调试又增加一个新的瑞士军刀, 所以我们接下来手把手的去官网移植源码…

HarmonyOS:使用Emitter进行线程间通信

Emitter主要提供线程间发送和处理事件的能力&#xff0c;包括对持续订阅事件或单次订阅事件的处理、取消订阅事件、发送事件到事件队列等。 一、Emitter的开发步骤如下&#xff1a; 订阅事件 import { emitter } from kit.BasicServicesKit; import { promptAction } from kit.…

Wi-Fi 进化论:从过去到未来(6/10)

Wi-Fi&#xff08;发音&#xff1a; /ˈwaɪfaɪ/&#xff09;&#xff0c;在中文里又称作“移动热点”&#xff0c;是Wi-Fi联盟制造商的商标作为产品的品牌认证&#xff0c;是基于IEEE 802.11标准的无线局域网通信技术 [6]。基于两套系统的密切相关&#xff0c;也常有人把Wi-F…

【C++初阶】第5课—动态内存管理

文章目录 1. 内存分布2. C语言动态内存管理3. C内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型 4. operator new和operator delete函数5. new和delete的实现原理6. malloc/free和new/delete的区别7. 定位new表达式(了解即可) 1. 内存分布 先来做一个关于…

学习threejs,设置envMap环境贴图创建反光效果

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.CubeTextureLoader 立…

Matlab Simulink HDL Coder FPGA开发初体验—计数器

目录 一、Simulink设计及仿真二、Verilog HDL代码转换1、参数配置2、HDL代码生成 三、ModelSim仿真分析1、使用自己编写的Testbench文件进行仿真2、使用HDL Coder生成的Testbench文件进行仿真 前言 Simulink HDL Coder‌是一款将Simulink和Stateflow模型转化为可综合的Verilog和…

【C语言】扫雷游戏(一)

我们先设计一个简单的9*9棋盘并有10个雷的扫雷游戏。 1&#xff0c;可以用数组存放&#xff0c;如果有雷就用1表示&#xff0c;没雷就用0表示。 2&#xff0c;排查(2,5)这个坐标时&#xff0c;我们访问周围的⼀圈8个位置黄色统计周围雷的个数是1。排查(8,6)这个坐标时&#xf…

实现点名神器的pyqt6实现

利用python gui创建点名神器&#xff0c;包含加分、导出加分记录、清除加分记录。 点名页面 首先导入学生信息 导入成功 开始点名 点击停止 点过之后&#xff0c;点击加分 加完分 查看加分记录 可以直接进入导出记录和清除历史。 此文到此结束&#xff0c;想要源码的请私聊我&a…

【UE5 C++】判断两点连线是否穿过球体

目录 前言 原理 代码 测试 结果 前言 通过数学原理判断空间中任意两点的连线是否穿过球体&#xff0c;再通过射线检测检验算法的正确性。 原理 &#xff08;1&#xff09;设球体球心的坐标为 &#xff0c;半径为r&#xff1b; &#xff08;2&#xff09;设线段中A点的坐…

【AI】数据,算力,算法和应用(3)

三、算法 算法这个词&#xff0c;我们都不陌生。 从接触计算机&#xff0c;就知道有“算法”这样一个神秘的名词存在。象征着专业、权威、神秘、高难等等。 算法是一组有序的解决问题的规则和指令&#xff0c;用于解决特定问题的一系列步骤。算法可以被看作是解决问题的方法…

计算机的错误计算(一百七十一)

摘要 探讨 MATLAB 中秦九韶&#xff08;Horner&#xff09;多项式的错误计算。 例1. 用秦九韶&#xff08;Horner&#xff09;算法计算&#xff08;一百零七&#xff09;例1中多项式 直接贴图吧&#xff1a; 这样&#xff0c;MATLAB 给出的仍然是错误结果&#xff0c;因为准…