江西宜春市建设局网站,wordpress博客下载器,已有网站备案,深圳网站设计灵点网络公司不错支持向量机在高维或无限维空间中构造超平面或超平面集合#xff0c;其可以用于分类、回归或其他任务。直观来说#xff0c;分类边界距离最近的训练数据点越远越好#xff0c;因为这样可以缩小分类器的泛化误差。调用sklearn.svm的svc函数#xff0c;将MNIST数据集进行分类其可以用于分类、回归或其他任务。直观来说分类边界距离最近的训练数据点越远越好因为这样可以缩小分类器的泛化误差。调用sklearn.svm的svc函数将MNIST数据集进行分类并将整体分类精度输出这里用了两种预处理的方法(将特征值变成0或者1的数将特征值变成0-1区间的数)效果不一样并且分别调用了两种核函数(高斯核函数和多项式核函数)。在支持向量机实验中将训练集和测试集都等分成10份并求十份数据集整体分类精度的平均值这样的结果较为准确客观。可以通过修改惩罚因子C的大小来看不同的效果并画出图进行比较C100的时候效果较为好。#任务比较不同的kernel的结果差异并画出相应的曲线来直观的表示import structfrom numpy import *import numpy as npimport timefrom sklearn.svm import SVC#C-Support Vector Classificationdef read_image(file_name):#先用二进制方式把文件都读进来file_handleopen(file_name,rb) #以二进制打开文档file_contentfile_handle.read() #读取到缓冲区中offset0head struct.unpack_from(‘IIII‘, file_content, offset) # 取前4个整数返回一个元组offset struct.calcsize(‘IIII‘)imgNum head[1] #图片数rows head[2] #宽度cols head[3] #高度imagesnp.empty((imgNum , 784))#empty是它所常见的数组内的所有元素均为空没有实际意义它是创建数组最快的方法image_sizerows*cols#单个图片的大小fmt‘‘ str(image_size) ‘B‘#单个图片的formatfor i in range(imgNum):images[i] np.array(struct.unpack_from(fmt, file_content, offset))# images[i] np.array(struct.unpack_from(fmt, file_content, offset)).reshape((rows, cols))offset struct.calcsize(fmt)return images#读取标签def read_label(file_name):file_handle open(file_name, rb) # 以二进制打开文档file_content file_handle.read() # 读取到缓冲区中head struct.unpack_from(‘II‘, file_content, 0) # 取前2个整数返回一个元组offset struct.calcsize(‘II‘)labelNum head[1] # label数# print(labelNum)bitsString ‘‘ str(labelNum) ‘B‘ # fmt格式‘47040000B‘label struct.unpack_from(bitsString, file_content, offset) # 取data数据返回一个元组return np.array(label)def normalize(data):#图片像素二值化变成0-1分布mdata.shape[0]nnp.array(data).shape[1]for i in range(m):for j in range(n):if data[i,j]!0:data[i,j]1else:data[i,j]0return data#另一种归一化的方法就是将特征值变成[0,1]区间的数def normalize_new(data):mdata.shape[0]nnp.array(data).shape[1]for i in range(m):for j in range(n):data[i,j]float(data[i,j])/255return datadef loadDataSet():train_x_filenametrain-images-idx3-ubytetrain_y_filenametrain-labels-idx1-ubytetest_x_filenamet10k-images-idx3-ubytetest_y_filenamet10k-labels-idx1-ubytetrain_xread_image(train_x_filename)#60000*784 的矩阵train_yread_label(train_y_filename)#60000*1的矩阵test_xread_image(test_x_filename)#10000*784test_yread_label(test_y_filename)#10000*1#可以比较这两种预处理的方式最后得到的结果# train_xnormalize(train_x)# test_xnormalize(test_x)# train_xnormalize_new(train_x)# test_xnormalize_new(test_x)return train_x, test_x, train_y, test_yif __name__‘__main__‘:classNum10score_train0.0score0.0temp0.0temp_train0.0print(Start reading data...)time1time.time()train_x, test_x, train_y, test_yloadDataSet()time2time.time()print(read data cost,time2-time1,second)print(Start training data...)# clfSVC(C1.0,kernel‘poly‘)#多项式核函数clf SVC(C0.01,kernel‘rbf‘)#高斯核函数#由于每6000个中的每个类的数量都差不多相等所以直接按照整批划分的方法for i in range(classNum):clf.fit(train_x[i*6000:(i1)*6000,:],train_y[i*6000:(i1)*6000])tempclf.score(test_x[i*1000:(i1)*1000,:], test_y[i*1000:(i1)*1000])# print(temp)temp_trainclf.score(train_x[i*6000:(i1)*6000,:],train_y[i*6000:(i1)*6000])print(temp_train)score(clf.score(test_x[i*1000:(i1)*1000,:], test_y[i*1000:(i1)*1000])/classNum)score_train(temp_train/classNum)time3 time.time()print(score:{:.6f}.format(score))print(score:{:.6f}.format(score_train))print(train data cost, time3 - time2, second)实验结果对二值化(normalize)后的不同核函数和C的结果进行了统计和分析。结果如下表所示Parameter二值化{ C:1, kernel: poly}{accuarcy:0.4312,train time:558.61}{C:1, kernel: rbf}{accuarcy:0.9212,train time:163.15}{C:10, kernel: poly}{accuarcy:0.8802,train time:277.78}{C:10, kernel: rbf}{accuarcy:0.9354,train time:96.07}{C:100, kernel: poly}{accuarcy:0.9427,train time:146.43}{C:100, kernel: rbf}{accuarcy:0.9324,train time:163.99}{C:1000,kernel:poly}{accuarcy:0.9519,train time:132.59}{C:1000,kernel:rbf}{accuarcy:0.9325,train time:97.54}{C:10000,kernel:poly}{accuarcy:0.9518,train time:115.35}{C:10000,kernel:rbf}{accuarcy:0.9325,train time:115.77}对于实验的优化方法可以采用pca主成分分析方法准确率和速度都有提升代码如下结果截屏原文https://www.cnblogs.com/BlueBlue-Sky/p/9382702.html