Python中的支持向量机SVM的使用(附实例代码)
支持向量机(Support Vector Machine,SVM)是一种非常常见的分类算法,在解决复杂问题时有着很好的性能。
安装必要的库
要使用SVM,需要安装一些库。这里推荐使用以下库:
- NumPy:用于支持向量机的数学运算和操作
- Pandas:用于数据读取和处理
- Scikit-learn:包含SVM模型和许多其他机器学习算法的库
!pip install numpy pandas scikit-learn
加载数据
我们将使用Iris数据集作为示例来演示SVM的使用。该数据集包含三种不同的鸢尾花品种(山鸢尾,变色鸢尾,维吉尼亚鸢尾)的150个样本,每个样本包含4个属性:萼片长度(Sepal Length)、萼片宽度(Sepal Width)、花瓣长度(Petal Length)和花瓣宽度(Petal Width)。
首先,我们需要使用Pandas加载数据。可以使用以下代码从CSV文件中加载数据:
import pandas as pd
# 加载数据
data = pd.read_csv('iris.csv')
接下来,我们将数据集拆分成两部分:一部分用于训练模型,另一部分用于测试模型。我们可以使用Scikit-learn库中的train_test_split
函数轻松地完成这个任务。
from sklearn.model_selection import train_test_split
# 拆分数据集:80%用于训练,20%用于测试
train_data, test_data, train_labels, test_labels = train_test_split(
data[['Sepal Length', 'Sepal Width', 'Petal Length', 'Petal Width']],
data['Class'],
test_size=0.2,
random_state=0)
在这里,将数据的80%用于训练,20%用于测试。
训练模型
接下来,我们可以使用Scikit-learn库中的SVC
类创建支持向量机模型。SVC类提供了不同的内核函数可用:线性、多项式、径向基和sigmoid。这个示例中,将使用线性内核函数。
from sklearn.svm import SVC
# 创建SVM模型,使用线性内核函数
model = SVC(kernel='linear')
model.fit(train_data, train_labels)
这里我们创建了一个SVM模型,并使用fit
函数将数据喂给模型进行训练。
测试模型
训练模型之后,我们需要使用测试数据对模型进行测试。
from sklearn.metrics import accuracy_score
# 用测试数据评估模型的准确性
predictions = model.predict(test_data)
print('模型在测试数据上的准确性:', accuracy_score(test_labels, predictions))
这里使用predict
函数对测试集中的数据进行预测,之后使用accuracy_score
函数来评估模型在测试数据上的准确性。
示例1:使用SVM进行二分类
这个示例使用一个名为diabetes.csv
的数据集。这个数据集包含有关患者的一些医学指标以及他们是否患有糖尿病的信息。
首先,我们需要加载数据,和之前操作一样使用Pandas
。
import pandas as pd
# 加载数据
data = pd.read_csv('diabetes.csv')
建议更改数据集的编码为utf-8,如:
import pandas as pd
# 加载数据
data = pd.read_csv('diabetes.csv', encoding='utf-8')
在这个示例中,我们需要将数据的标签从字符串转换为数字。为了做到这一点,我们可以使用以下代码:
# 将标签转换为数字
data['Outcome'] = pd.Categorical(data['Outcome']).codes
类别转换成数字后,使用train_test_split
函数将数据集拆分为训练和测试部分。
from sklearn.model_selection import train_test_split
# 拆分数据集
train_data, test_data, train_labels, test_labels = train_test_split(
data.iloc[:,:-1],
data.iloc[:,-1],
test_size=0.2,
random_state=0)
在这个示例中,将数据的80%用于训练,20%用于测试。
现在,我们可以创建一个SVM模型并在训练数据上进行训练。这里使用了径向基内核函数。
from sklearn.svm import SVC
# 创建SVM模型,使用径向基内核函数
model = SVC(kernel='rbf')
model.fit(train_data, train_labels)
现在,我们可以使用测试数据对模型进行测试。与我们之前介绍的方法相同,我们可以使用predict
和accuracy_score
函数对测试数据进行预测和评估。
from sklearn.metrics import accuracy_score
# 用测试数据评估模型的准确性
predictions = model.predict(test_data)
print('模型在测试数据上的准确性:', accuracy_score(test_labels, predictions))
示例2:使用SVM进行多分类
这个示例使用Iris数据集来演示如何使用SVM进行多分类。当数据集具有多个类时,我们可以使用多类SVM模型来进行分类。
同样地,我们需要加载数据。
import pandas as pd
# 加载数据
data = pd.read_csv('iris.csv')
使用train_test_split
函数将数据集拆分为训练和测试部分。
from sklearn.model_selection import train_test_split
# 拆分数据集
train_data, test_data, train_labels, test_labels = train_test_split(
data[['Sepal Length', 'Sepal Width', 'Petal Length', 'Petal Width']],
data['Class'],
test_size=0.2,
random_state=0)
在这个示例中,将数据的80%用于训练,20%用于测试。
SVM具有多类支持。这里使用Scikit-learn库中的SVC
类创建一个多类SVM模型。这个SVM模型有一个参数decision_function_shape
,用于指定决策函数的形状。对于多类问题,Crammer和Singer提出了一个方法来解决多类SVM问题。对于这种方法,我们将decision_function_shape
设置为ovr
。
from sklearn.svm import SVC
# 创建一个多类SVM模型
model = SVC(decision_function_shape='ovr')
model.fit(train_data, train_labels)
现在,我们可以使用测试数据对模型进行测试。
from sklearn.metrics import accuracy_score
# 用测试数据评估模型的准确性
predictions = model.predict(test_data)
print('模型在测试数据上的准确性:', accuracy_score(test_labels, predictions))
这里同样使用predict
和accuracy_score
函数对测试数据进行预测和评估。
总的来说,这是关于Python中支持向量机SVM使用的详细攻略,通过这些例子,您可以更好地理解如何使用SVM分类器。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中的支持向量机SVM的使用(附实例代码) - Python技术站