• python 实现简单的SVM分类
2021-08-06 13:04:47
def getData2():
r"""
使用numpy生成随机数；
使用pandas构造满足条件的随机数；
:return:
"""
df = pd.DataFrame()
df['X'] = np.random.randint(1,100,size=(100))
df['Y'] = np.random.randint(1,100,size=(100))

G1 = df[(df['X']>50) & (df['Y']>50)]
G2 = df[(df['X']<50) & (df['Y']<50)]

G1 = G1.reset_index(drop=True)
G2 = G2.reset_index(drop=True)

return (G1, G2)

# 解决分类问题
import math

from LinearRegression import *

def calDistance(x,y,w,b):
r"""
计算一个点(x,y)到直线(w,b)的距离
:param x: point x
:param y: point y
:param w: 直线的斜率
:param b: 直线的截距
:return: 返回距离
"""
x0 = x
y0 = y
x1 = (y0-b)/w
y1 = w*x0+b
d0 = math.sqrt((x0-x1)**2+(y0-y1)**2)
if d0==0:
return 0
else:
dis = abs(x0-x1)*abs(y0-y1)/d0
return dis

def getSVMLoss(G1, G2, w, b):
r"""
计算在(w,b)的前提下，整个数据集的loss；
loss function 是 hinge loss
:param G1:第一类样本pandas，第一列是X，第二列是Y
:param G2:第二类样本pandas，第一列是X，第二列是Y
:param w:斜率
:param b:截距
:return:返回当前斜率和截距下的loss
"""
total_loss = 0

#G1的loss
class1Num = G1.shape[0]
d1min = 99999
x_f_1, y_f_1 = 0, 0
for i in range(class1Num):
x = G1.iloc[i,0]
y = G1.iloc[i,1]
d = calDistance(x,y,w,b)
if (w*x+b) > y:
total_loss += d

####
if d < d1min:
x_f_1, y_f_1 = x, y
d1min = d

#G2的loss
class2Num = G2.shape[0]
d2min = 99999
x_f_2, y_f_2 = 0, 0
for i in range(class2Num):
x = G2.iloc[i,0]
y = G2.iloc[i,1]
d = calDistance(x,y,w,b)
if w*x+b < y: #分类错误进行惩罚
total_loss += d

if d < d2min:#分类错误进行惩罚
x_f_2, y_f_2 = x, y
d2min = d

total_loss = total_loss + abs(d2min - d1min)#如果两者相距太远，进行惩罚

def SVMFit(G1, G2):
w_last, b_last = -5, 100
w, b = -6, 99
loss_last = 1
loss = 0
stop = 10000
i = 0
eta = 1e-4
count = 0
while(i < stop):
print("{:05d}: w is {:.2f}, b is {:.2f}, loss is {:.2f}".format(i,w,b,loss))
loss = getSVMLoss(G1, G2, w, b)
if loss == 0:
break
if loss - loss_last < 0.1:
count += 1
if count>1000:
break
wn = w - eta * (loss-loss_last)/(w-w_last)
bn = b - eta * (loss-loss_last)/(b-b_last)
w_last = w
w = wn
b_last = b
b = bn
loss_last = loss
i += 1

return w, b

if __name__ == "__main__":
print("to solve classification problem")
np.random.seed(5)
G1, G2 = getData2()
fig, ax = plt.subplots()
ax.scatter(G1['X'], G1['Y'], color="C0")
ax.scatter(G2['X'], G2['Y'], color="C1")

ax.plot(np.array([50,50]), np.array([0,100]))
ax.plot(np.array([0,100]), np.array([50,50]))

w, b = -6, 99
x = np.arange(0, 100, 1)
y = w * x + b
ax.plot(x, y, color="C2",label="original")
w_f, b_f = SVMFit(G1, G2)
y_f = w_f * x + b_f
ax.plot(x, y_f, color="C3",label="final")
ax.legend()

ax.set_xlim(xmin = 0, xmax = 100)
ax.set_ylim(ymin = 0, ymax = 100)
fig.show()
# x,y,w,b
# print("距离是：{:.2f}".format(calDistance(1,0,1,0)))



更多相关内容
• python 自定义生成多核svm进行分类
• 下载后，安装好版本匹配的python3.6,numpy,scipy,matplot,sklearn,skimage等包，后直接可以运行，无需修改代码。运行后输入y，就可以实习自带的图像分类（小鸡，小鸭，蛇，猫等分类）。
• 利用Libsvm进行SVM分类python)非常详细的说明文档，含两个文档说明，方便大家参考学习。
• 代码是基于SVM分类Python实现，原文章节题目和code关系不大，或者说给出已处理好数据的方法缺失、源是图像数据更是不见踪影，一句话就是练习分类器（▼㉨▼メ） 源代码直接给好了K=30，就试了试怎么选的，挑选...
• 利用python,实现基于SVM的文本分类. 代码见 https://github.com/yangysc/Document-Classification
• 卷积神经网络（CNN）用来提取特征，采用SVM分类器进行训练和分类
• 鸢尾花数据集分析与线性分类。数据统计特性分析。Logistic回归和SVM方法，分类可视化
• ## python的svm分类器

热门讨论 2014-03-03 10:56:10
基于pythonSVM分类算法，可以直接使用，包含源代码，支持参数设定
• from sklearn import datasets,linear_model,cross_validation,svm def load_data_regression(): diabetes = datasets.load_diabetes() return cross_validation.train_test_split(diabetes,diabetes.target,te
• svm python 实现对故障信号的分类处理
• Python实现GA(遗传算法)对SVM分类模型参数的优化资料说明：包括数据集+源代码+Word文档说明。 资料内容包括： 1)需求分析； 2)数据采集； 3)数据预处理； 4)探索性数据分析； 5)特征工程； 6)机器建模； 7)模型评估...
• ## svm图像分类python代码实现续

千次阅读 热门讨论 2021-05-31 17:41:32
svm图像分类python代码实现续 这篇博客诗接上前面一篇svm图像分类得一篇续集 svm分类代码如下 #os.system("pause") #Svm 训练： import sys import os import cv2 import numpy as np from sklearn.svm import ...

## svm图像分类python代码实现续

这篇博客诗接上前面一篇svm图像分类得一篇续集
svm分类代码如下


#os.system("pause")

#Svm 训练：
import sys
import os
import cv2
import numpy as np
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
import time
import pickle
#help(SVC)

SHAPE = (30, 30)
def getImageData(directory):
s = 1
feature_list = list()
label_list   = list()
num_classes = 0
for root, dirs, files in os.walk(directory):
for d in dirs:
num_classes += 1
images = os.listdir(root+d)
for image in images:
s += 1
label_list.append(d)
feature_list.append(extractFeaturesFromImage(root + d + "/" + image))

return np.asarray(feature_list), np.asarray(label_list)

def extractFeaturesFromImage(image_file):
img = cv2.resize(img, SHAPE, interpolation = cv2.INTER_CUBIC)
img = img.flatten()
img = img / np.mean(img)
return img

if __name__ == "__main__":

directory ="C:/learn_data/2021_car/image/"

feature_array, label_array = getImageData(directory)

X_train, X_test, y_train, y_test = train_test_split(feature_array, label_array, test_size = 0.2, random_state = 42)

if os.path.isfile("svm_model.pkl"):
else:
svm = SVC(kernel='rbf',gamma=0.001)
svm.fit(X_train, y_train)
pickle.dump(svm, open("C:/learn_data/2021_car/svm_model.pkl", "wb"))

print("Testing...\n")

right = 0
total = 0
for x, y in zip(X_test, y_test):
x = x.reshape(1, -1)
prediction = svm.predict(x)[0]
if y == prediction:
right += 1
total += 1

accuracy = float(right) / float(total)

print (str(accuracy) + "% accuracy")
print ("Manual Testing\n")
print("success")

os.system("pause")



## 标题

那么数据集是什么样的呢
这里我要说一下了，这一次做的三分类，数据集的文件结构如下：

也就是说，这里的image就是我们的训练集，里面分为三个子文件夹，这三个子文件夹里只能有图片，其他的任何文件都不能有

好的，那么对于文件没是没有要求的，那么如果你现在想要进行二分类，三分类，也就改变image下的子文件数量，这里应该能听懂

如果调用模型，在上一篇博客有着介绍可以参考。
博客链接在这里
这次的数据集已上传到我的资源，是三类车牌号数据。

展开全文
• 机器学习中的SVM算法的SVC实现，亲测可运行，效果不错
• 对于分类，SVM最初用于解决二分类问题，多分类问题可通过构建多个SVM分类器解决。SVM具有两大特点：1.寻求最优分类边界，即求解出能够正确划分训练数据集并且几何间隔最大的分离超平面，这是SVM的基本思想；2.基于核...
• 该文件包含鸢尾花分类Python源程序和数据集，数据集内包含 3 类鸢尾花，分别为山鸢尾（setosa）、变色鸢尾（versicolor）和维吉尼亚鸢尾（virginica）。每类各 50 个数据，每条记录有 4 项特征：花萼长度、花萼...
• Three classifications of iris data using SVM based on Anaconda
• 支持向量机（support vector machines, SVM）是一种二分类模型，它的基本模型是定义在特征空间上的间隔最大的线性分类器，本文是 OpenCV的简单SVM例程
• 主要为大家详细介绍了手把手教你python实现SVM算法，具有一定的参考价值，感兴趣的小伙伴们可以参考一下
• python3.6，svm-hog图像分类，成功测试。代码图片打包下载。直接运行。

python使用svm，hog进行图像分类时，需要使用sklearn，skimage，numpy，matplotlib等。这些包如果版本不对应很难成功运行代码。

python 安装numpy,matplotlib 清华源快速安装_Vertira的博客-CSDN博客pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simplepip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simplehttps://blog.csdn.net/Vertira/article/details/122171528

svm_hog python源码下载地址

下载的压缩文件及其解压后的文件

配置好各种包后，直接运行hog_svm.py（注意：把raw_input (这个是python2.0版本的)改成 input（这个是python3的））

运行后程序输出

文件夹中的变化：

多了几个文件夹和一个输出测试结果 result.txt. 上面三个文件夹中都有训练产生的特征和参数。

result.txt里面是预测的结果

欢迎各位客官，点赞，收藏，加关注。

展开全文
• python语言使用LBP算法提取特征向量SVM算法训练模型和识别分类整套文件。内有训练和测试、验证图片集，训练和测试程序分两个py文件。训练使用lbp_train.py文件，测试和验证使用均使用lbp_test.py文件，更改训练集和...
• 题目是将图片库中的纹理图片裁剪成九份，其中五份做训练集，四份做测试集，先提取图片LBP特征 ，最后用svm支持向量机进行学习，在预测测试集里的图片是哪一类纹理。 正常情况下是需要调参的，即调整SVM的参数，但图...
• 基于LSA和SVM的文本分类模型的研究，本文提出了一种基于标题类别语义识别的文本分类算法
• CNN-SVM_SVMCNN_SVM特征提取_SVM_python_SVM分类_源码.zip
• 数据集介绍 总共包含150行数据 每一行数据由 4 个特征值及一个目标值组成。 4 个特征值分别为：萼片长度、萼片宽度、花瓣长度、花瓣宽度 ...from sklearn import svm from sklearn import model_selection import mat
• SVM分类的实用指南！（主要是为初学者编写的） 我们现在有一个简单的脚本（easy.py），用于不了解SVM的用户。它使得一切都自动化 - 从数据缩放到参数选择。 参数选择工具grid.py生成以下交叉验证准确度等值线。要...
• 基于p基于pythonsvm算法源代码ython的svm算法源代码

...