python使用svm将两种2d图像分类代码
时间: 2024-01-06 08:06:16 浏览: 58
以下是一个基本的 Python SVM 2D 图像分类代码,用于将两种不同的2D图像分类:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
# 创建两个类别的数据集
class_1 = np.random.randn(50, 2) + np.array([2, 2])
class_2 = np.random.randn(50, 2) + np.array([-2, -2])
X = np.vstack((class_1, class_2))
y = np.hstack((np.ones(50), -np.ones(50)))
# 训练 SVM 模型
clf = svm.SVC(kernel='linear', C=1)
clf.fit(X, y)
# 绘制决策边界
w = clf.coef_[0]
a = -w[0] / w[1]
xx = np.linspace(-5, 5)
yy = a * xx - (clf.intercept_[0]) / w[1]
# 绘制训练样本和决策边界
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)
plt.plot(xx, yy, 'k-')
plt.show()
```
这个示例中,我们先创建了两个类别的数据集,然后使用 SVM 模型进行训练,并绘制决策边界和训练样本。你可以根据自己的需求修改代码以适应不同的数据集和特征。
相关问题
python使用svm两种图像分类代码
以下是两个使用Python的Scikit-learn库实现SVM图像分类的示例代码:
### 代码1:使用HOG特征进行图像分类
HOG(Histogram of Oriented Gradients)是一种图像特征提取方法,常用于图像分类和物体检测。以下是一个使用HOG特征进行图像分类的示例代码:
```python
import cv2
import numpy as np
from sklearn import svm
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from skimage.feature import hog
from skimage import data, exposure
# 加载图像数据集
dataset = []
labels = []
for i in range(0, 10):
for j in range(0, 100):
img = cv2.imread("data/" + str(i) + "_" + str(j) + ".png", cv2.IMREAD_GRAYSCALE)
dataset.append(img)
labels.append(i)
# 提取HOG特征
hog_features = []
for img in dataset:
fd = hog(img, orientations=8, pixels_per_cell=(8, 8), cells_per_block=(1, 1), visualize=False)
hog_features.append(fd)
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(hog_features, labels, test_size=0.3, random_state=0)
# 创建SVM分类器
clf = svm.SVC(kernel='linear', C=1)
# 训练模型
clf.fit(X_train, y_train)
# 预测测试数据
y_pred = clf.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:",accuracy)
# 显示测试图片和预测结果
for i in range(0, 10):
img = cv2.imread("data/" + str(i) + "_0.png", cv2.IMREAD_GRAYSCALE)
fd, hog_image = hog(img, orientations=8, pixels_per_cell=(8, 8), cells_per_block=(1, 1), visualize=True)
hog_image_rescaled = exposure.rescale_intensity(hog_image, in_range=(0, 10))
plt.subplot(2, 5, i+1)
plt.imshow(hog_image_rescaled, cmap=plt.cm.gray)
plt.title("Predict:" + str(clf.predict([fd])[0]))
plt.show()
```
这个示例代码使用了一个包含10个类别的图像数据集,并将其划分为训练集和测试集。然后,使用HOG特征提取方法对图像进行特征提取,并使用SVM分类器对训练集进行训练。最后,代码还展示了测试图片和预测结果。
### 代码2:使用颜色直方图进行图像分类
颜色直方图是一种常用的图像特征提取方法,用于描述图像中颜色的分布情况。以下是一个使用颜色直方图进行图像分类的示例代码:
```python
import cv2
import numpy as np
from sklearn import svm
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载图像数据集
dataset = []
labels = []
for i in range(0, 10):
for j in range(0, 100):
img = cv2.imread("data/" + str(i) + "_" + str(j) + ".png")
dataset.append(img)
labels.append(i)
# 提取颜色直方图特征
color_features = []
for img in dataset:
hist = cv2.calcHist([img], [0, 1, 2], None, [8, 8, 8], [0, 256, 0, 256, 0, 256])
hist = cv2.normalize(hist, hist).flatten()
color_features.append(hist)
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(color_features, labels, test_size=0.3, random_state=0)
# 创建SVM分类器
clf = svm.SVC(kernel='linear', C=1)
# 训练模型
clf.fit(X_train, y_train)
# 预测测试数据
y_pred = clf.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:",accuracy)
# 显示测试图片和预测结果
for i in range(0, 10):
img = cv2.imread("data/" + str(i) + "_0.png")
hist = cv2.calcHist([img], [0, 1, 2], None, [8, 8, 8], [0, 256, 0, 256, 0, 256])
hist = cv2.normalize(hist, hist).flatten()
plt.subplot(2, 5, i+1)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title("Predict:" + str(clf.predict([hist])[0]))
plt.show()
```
这个示例代码同样使用了一个包含10个类别的图像数据集,并将其划分为训练集和测试集。然后,使用颜色直方图特征提取方法对图像进行特征提取,并使用SVM分类器对训练集进行训练。最后,代码还展示了测试图片和预测结果。
python使用svm2d图像分类代码
以下是一个基本的 Python SVM2D 图像分类代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets
# 加载数据集
digits = datasets.load_digits()
# 取前两个特征,用于二维可视化
X = digits.data[:, :2]
y = digits.target
# 训练 SVM2D 模型
svc = svm.SVC(kernel='linear', C=1, gamma=1)
svc.fit(X, y)
# 绘制决策边界
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1))
Z = svc.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
# 绘制训练样本
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired, edgecolors='k')
plt.contour(xx, yy, Z, alpha=0.8)
plt.show()
```
这个示例使用的是 digits 数据集,并取前两个特征进行二维可视化。然后使用 SVM2D 模型进行训练,并绘制决策边界和训练样本。你可以根据自己的需求修改代码以适应不同的数据集和特征。
阅读全文