写一段支持向量机SVM(Support Vector Machine)的python代码
时间: 2023-10-08 08:11:14 浏览: 110
以下是一个简单的支持向量机分类器的python代码:
```python
from sklearn import svm
import numpy as np
# 生成一些数据
X = np.array([[0, 0], [1, 1], [1, 0], [0, 1]])
y = np.array([0, 0, 1, 1])
# 创建SVM分类器对象
clf = svm.SVC(kernel='linear')
# 训练分类器
clf.fit(X, y)
# 预测新数据点的分类
print(clf.predict([[2., 2.], [-1., -2.]]))
```
相关问题
写Python代码实现:熟悉支持向量机SVM (Support Vector Machine)模型分类算法的使用。 2. 利用高斯核作为核函数训练模型。 3. 保存并调用训练模型并预测自己给出样例的类别。 4. 实现SVM分类的可视化。
以下是一个简单的 Python 代码实现,实现了支持向量机 (SVM) 模型分类算法的使用,使用高斯核作为核函数进行训练,保存并调用训练模型并预测给出的样例的类别,同时还实现了 SVM 分类的可视化。
```python
# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets
# 加载数据
iris = datasets.load_iris()
X = iris.data[:, :2] # 只使用前两个特征,方便可视化
y = iris.target
# 定义 SVM 模型
C = 1.0 # SVM 正则化参数
svc = svm.SVC(kernel='rbf', gamma='auto', C=C)
# 训练模型
svc.fit(X, y)
# 保存模型
import joblib
joblib.dump(svc, 'svm.pkl')
# 加载模型并预测样例
svc = joblib.load('svm.pkl')
print(svc.predict([[5.1, 3.5]])) # 预测样例的类别
# 可视化分类结果
# 生成网格点
xx, yy = np.meshgrid(np.linspace(X[:, 0].min() - 1, X[:, 0].max() + 1, 500),
np.linspace(X[:, 1].min() - 1, X[:, 1].max() + 1, 500))
Z = svc.predict(np.c_[xx.ravel(), yy.ravel()]) # 预测每个网格点的类别
Z = Z.reshape(xx.shape)
# 绘制分类边界和数据点
plt.contourf(xx, yy, Z, cmap=plt.cm.RdBu, alpha=.8)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.RdBu_r)
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('SVM classification')
plt.show()
```
上述代码中,我们使用 `sklearn` 库中的 `svm` 模块来实现 SVM 模型的训练和预测。其中,`SVC` 类表示支持向量分类器,`kernel` 参数指定核函数类型,这里使用高斯核函数 `'rbf'`,`gamma` 参数表示核函数的宽度,`C` 参数表示正则化程度。训练完成后,我们使用 `joblib` 库的 `dump` 方法将模型保存到本地文件 `'svm.pkl'` 中,并使用 `load` 方法加载模型并进行预测。最后,我们使用 `matplotlib` 库对分类结果进行可视化,绘制分类边界和数据点。
注意,这只是一个简单的 SVM 分类实现,实际应用中需要根据具体问题进行调参和优化。
一、实验目的 1.熟悉支持向量机SVM (Support Vector Machine)模型分类算法的使用。 2.利用高斯核作为核函数训练模型。 3.保存并调用训练模型并预测自己给出样例的类别。 4.实现SVM分类的可视化。python代码
好的,以下是一个简单的Python代码示例,用于实现支持向量机(SVM)的训练和预测,使用高斯核函数。同时,还包括了模型的保存和调用,以及可视化分类结果的部分。
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_blobs
from sklearn.externals import joblib
# 生成随机数据
X, y = make_blobs(n_samples=50, centers=2, random_state=6)
# 训练SVM模型
clf = svm.SVC(kernel='rbf', gamma=0.5, C=1.0)
clf.fit(X, y)
# 保存模型到文件
joblib.dump(clf, 'svm_model.pkl')
# 从文件中加载模型
clf = joblib.load('svm_model.pkl')
# 预测新样本的分类
new_sample = [[-5, 0], [0, 5], [5, 0]]
print(clf.predict(new_sample))
# 可视化分类结果
plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)
plt.xlabel('X1')
plt.ylabel('X2')
# 生成网格数据并绘制分类边界
xlim = plt.gca().get_xlim()
ylim = plt.gca().get_ylim()
xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 50), np.linspace(ylim[0], ylim[1], 50))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contour(xx, yy, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])
plt.show()
```
这个示例程序使用`make_blobs()`函数生成了50个带标签的二维数据点。接着,使用`svm.SVC()`函数构建了一个基于高斯核的SVM分类器,并使用`fit()`方法对数据进行训练。训练好模型后,使用`joblib.dump()`函数将模型保存到文件中。接下来,使用`joblib.load()`函数从文件中加载模型,并使用`predict()`方法对新样本进行分类。最后,使用Matplotlib库绘制了散点图和分类边界。
阅读全文