赞
踩
支持向量机(Support Vector Machine, SVM)是一种二分类模型,目标是寻找一个标准(称为超平面)对样本数据进行分割,分割的原则是确保分类最优化(类别之间的间隔最大)。
下图绿色和黄色,红色可以基本建红色和黄色划分开
cv2函数格式:
svm=cv2.ml.SVM_create() 获取了空分类器svm,对该模型使用svm.train()函数训练数据,
trainedResults =svm.train( trainData,trainCowCol,trainLable)
首先考虑员工一个月某产品销售数量,成绩考虑用100分来表示,那么可用模拟出分数在95分以上的数据为【95-100】为优秀
销售数量 | 积分 | |
1 | 95 | 95 |
2 | 94 | 94 |
3 | 85 | 80 |
import cv2 import numpy as np import matplotlib.pyplot as plt # 第1步 准备数据 # 表现为A级的员工销售成绩,销售积分 a = np.random.randint(95,100, (20, 2)).astype(np.float32) # 表现为B级的员工销售成绩,销售积分 b = np.random.randint(85,94, (20, 2)).astype(np.float32) # 合并数据 data = np.vstack((a, b)) data = np.array(data, dtype='float32') # 第2步 建立分组标签,0代表A级,1代表B级 #aLabel对应着a的标签,为类型0-等级A aLabel=np.zeros((20,1)) #print(aLabel) #bLabel对应着b的标签,为类型1-等级B bLabel=np.ones((20,1)) # 合并标签 label = np.vstack((aLabel, bLabel)) label = np.array(label, dtype='int32') # 第3步 训练 # 用ml机器学习模块 SVM_create() 创建svm svm = cv2.ml.SVM_create() # 属性设置,直接采用默认值即可 svm.setKernel(cv2.ml.SVM_LINEAR) # line #svm.setC(0.001) # 训练 result = svm.train(data, cv2.ml.ROW_SAMPLE, label) # 第4步 预测 # 生成 2个准备预测的结果 testdata = np.random.randint(85,100, (2, 2)).astype(np.float32) test = np.vstack(testdata) test = np.array(test, dtype='float32') # 预测 (p1, p2) = svm.predict(test) # 第5步 观察结果 # 可视化 plt.scatter(a[:,0], a[:,1], 80, 'g', 'o') plt.scatter(b[:,0], b[:,1], 80, 'b', 's') plt.scatter(test[:,0], test[:,1], 80, 'r', '*') plt.show() # 预测结果 print(p2)
要训练的数据和待训练的数据通过随机值来训练,svm的值超级飘。还有固定一下训练集合
svm的关键还是训练数据的选择上,如果训练的结果集不好,结果也会到处飘,怎么去好好选择训练集。继续研究
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。