svm图像二分类python
时间: 2023-07-08 19:10:34 浏览: 129
要使用 SVM 进行二分类图像分类,可以将正例和反例的图像数据分别作为样本和标签,然后使用 SVM 进行训练和预测。以下是一个使用 Python 和 Scikit-learn 库实现 SVM 二分类图像分类的简单示例:
1. 导入必要的库:
```python
from sklearn import svm
from skimage import io, color, feature
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
```
2. 加载图像数据:
```python
# 加载正例图像
pos_path = "path/to/positive/images/folder"
pos_images = io.imread_collection(pos_path)
pos_data = []
for image in pos_images:
# 将图像转换为灰度图像
gray_image = color.rgb2gray(image)
# 提取图像的 HOG 特征
hog_feature = feature.hog(gray_image, orientations=8, pixels_per_cell=(8, 8),
cells_per_block=(2, 2), transform_sqrt=True, block_norm="L1")
# 将 HOG 特征加入正例数据中
pos_data.append(hog_feature)
# 加载反例图像
neg_path = "path/to/negative/images/folder"
neg_images = io.imread_collection(neg_path)
neg_data = []
for image in neg_images:
# 将图像转换为灰度图像
gray_image = color.rgb2gray(image)
# 提取图像的 HOG 特征
hog_feature = feature.hog(gray_image, orientations=8, pixels_per_cell=(8, 8),
cells_per_block=(2, 2), transform_sqrt=True, block_norm="L1")
# 将 HOG 特征加入反例数据中
neg_data.append(hog_feature)
# 将正例和反例数据合并
X = pos_data + neg_data
# 标记正例为1,反例为0
y = [1]*len(pos_data) + [0]*len(neg_data)
```
3. 划分训练集和测试集:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
```
4. 创建 SVM 模型并进行训练:
```python
clf = svm.SVC(kernel='rbf', C=10, gamma=0.001)
clf.fit(X_train, y_train)
```
5. 对测试集进行预测并计算准确率:
```python
y_pred = clf.predict(X_test)
acc = accuracy_score(y_test, y_pred)
print("Accuracy:", acc)
```
这是一个简单的 SVM 二分类图像分类示例。你可以根据自己的需求对其进行修改和优化。注意,这个示例中使用的是 HOG 特征提取器,你也可以使用其他的特征提取器。
阅读全文