SVM(支持向量机)图像分类是在1964年提出的,当时被称为广义肖像算法(generalized portrait algorithm)。其早期工作来自前苏联学者Vladimir N. Vapnik和Alexander Y. Lerner在1963年发表的研究。 1964年,Vapnik和Alexey Y. Chervonenkis对广义肖像算法进行了进一步讨论并建立了硬边距的线性SVM。
SVM图像分类的优点主要有:
分类能力强:SVM算法具有较强的分类能力,特别是对于一些复杂的、非线性可分的数据集,SVM算法往往能够获得比其他算法更好的分类效果。
适用性广:SVM算法可以应用于多种类型的分类问题,包括二分类、多分类问题等。
核函数选择灵活:SVM算法中的核函数选择灵活,不同的核函数可以适用于不同类型的数据集。
特征选择简单:SVM算法在进行特征选择时,只需要对输入数据进行简单的预处理,即可获得较好的分类效果。
然而,SVM图像分类也存在一些缺点:
对参数和核函数的选择敏感:SVM算法的性能对参数和核函数的选择非常敏感,不同的参数和核函数可能导致完全不同的分类结果。
计算量大:SVM算法的计算量较大,对于大规模数据集的分类可能会变得非常耗时。
对噪声和异常值敏感:SVM算法对噪声和异常值比较敏感,如果数据集中存在噪声或异常值,可能会导致分类精度下降。
对多分类问题处理不够理想:虽然SVM算法可以应用于多分类问题,但是对于一些多类别的数据集,SVM算法的分类效果可能不够理想。
总的来说,SVM图像分类在很多情况下能够表现出优秀的性能,但也需要针对具体问题调整参数和核函数,并处理噪声和异常值等问题。
import os import joblib#保存模型 from PIL import Image from sklearn.svm import SVC#c是分类,r是回归 from sklearn.preprocessing import StandardScaler#标准化 from sklearn import datasets from sklearn.model_selection import train_test_split import numpy #读数据 iris=datasets.load_digits() x=iris.data y=iris.target ############################################ #写这一段是可以观察数据集的样子 # x=x[3] # y=y[3] # list=[] # for i in x: # if i==0: # list.append(0) # else: # list.append(255) # x=numpy.array(list) # x=x.reshape(8,8) # x= Image.fromarray(x) # 输出的是4通道图 # x = x.convert('1') # resultPath = r'D:\联想电脑\python新代码\ggb\best' # x.save(os.path.join(resultPath, '11') + '.jpg') # 前面列表遍历还有ecoph+=1每轮次数 # print(y) ############################################### #标准化 std=StandardScaler()#这一步是必要的,对象化 # x_std=StandardScaler.fit_transform(x) x_std=std.fit_transform(x) print(len(x_std)) #拆分训练集 x_train,x_test,y_train,y_test=train_test_split(x_std,y,test_size=0.3) print(len(x_train),len(x_test),len(y_train),len(y_test)) print('++',x_train) #SVM建模 svm_classification=SVC() svm_classification.fit(x_train,y_train) #模型读取 save_path='D:\联想电脑\python新代码\ggb\cunchu' joblib.dump(svm_classification,f'{save_path}\svm——class.pkl') #建模效果 a=svm_classification.score(x_test,y_test) print(a)
本文是作者好奇驱使下自我尝试的代码,仅供参考