Python 实现支持向量机分类:数据生成、模型训练和预测
Python 实现支持向量机分类:数据生成、模型训练和预测
本文将使用 Python 语言,实现一个支持向量机模型,并使用随机生成的数据进行训练和预测。
算法设计思路
- 随机生成数据: 生成一组数据,格式为 (x1, x2),并将其划分为两类,分别标记为 0 和 1。
- 数据划分: 将数据分为训练集和测试集,通常采用 7:3 的比例。
- 模型训练: 使用支持向量机模型对训练集进行训练,得到最优的超平面。
- 参数输出: 输出训练好的模型参数 W 和 b。
- 预测新样本: 使用训练好的模型对新出现的样本进行预测,判断其所属类别。
代码实现
import numpy as np
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 1. 生成数据
num_samples = 100
x1 = np.random.rand(num_samples) * 10
x2 = np.random.rand(num_samples) * 10
X = np.column_stack((x1, x2))
y = np.random.randint(0, 2, size=num_samples)
# 2. 数据划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 3. 数据预处理
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 4. 模型训练
model = SVC(kernel='linear') # 使用线性核函数
model.fit(X_train, y_train)
# 5. 参数输出
W = model.coef_[0]
b = model.intercept_[0]
print('模型参数 W:', W)
print('模型参数 b:', b)
# 6. 预测新样本
new_sample = np.array([[5, 7]]) # 新样本数据
new_sample = scaler.transform(new_sample)
prediction = model.predict(new_sample)
print('预测结果:', prediction[0])
可能存在的问题
- 数据不均衡: 随机生成的数据可能导致两类样本数量不均衡,影响模型训练效果。
- 数据归一化: 数据未经归一化处理可能会影响模型的准确性。
- 参数选择: 选择合适的核函数和正则化参数对于模型性能至关重要,需要根据具体问题进行调整。
收获
通过实现支持向量机模型,可以更好地理解支持向量机的原理和应用,例如图像分类、文本分类等领域。同时,也能提升编程能力和算法实现能力。
原文地址: https://www.cveoy.top/t/topic/jCPt 著作权归作者所有。请勿转载和采集!