reshape函数用法
如何用Python实现支持向量机?
如何用Python实现支持向量机?
1,实现线性分类
import numpy as np
import as plt
from _generator import make_blobs
from import SVC
#随机生成点,n_samples:样本点个数;centers:样本点分为几类;random_state:每次随机生成一致;cluster_std:每类样本点间的离散程度,值越大离散程度越大。
X,y make_blobs(n_samples50, centers2, random_state0, cluster_std0.60)
#画出所有样本点
(X[:,0],X[:,1],cy,cmapsummer)
#使用线性分类SVC拟合
#svc函数还可以包括以下参数(具体例子见文章最后):
#1,C(C越大意味着分类越严格不能有错误;当C趋近于很小的时意味着可以有更大的错误容忍)
#2,kernel(kernel必须是[‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’]中的一个,默认为’rbf’)
#3,gamma(gamma越大模型越复杂,会导致过拟合,对线性核函数无影响)
model SVC(kernellinear)
(X,y)
plot_svc_decision_function(model)
这里用到绘制边界线及圈出支持向量的函数plot_svc_decision_function()
def plot_svc_decision_function(model, axNone, plot_supportTrue):
#Plot the decision function for a 2D SVC
if ax is None:
ax plt.gca()
#找出图片x轴y轴的边界
xlim _xlim()
ylim _ylim()
# create grid to evaluate model
x (xlim[0], xlim[1], 30)
y (ylim[0], ylim[1], 30)
Y, X (y, x)
#形成图片上所有坐标点(900,2),900个二维点
xy np.vstack([X.ravel(), Y.ravel()]).T
#计算每点到边界的距离(30,30)
P _function(xy).reshape()
#绘制等高线(距离边界线为0的实线,以及距离边界为1的过支持向量的虚线)
(X, Y, P, colorsk,levels[-1, 0, 1], alpha0.5,linestyles[--, -, --])
# 圈出支持向量
if plot_support:
#_vectors_函数可打印出所有支持向量坐标
(_vectors_[:, 0],_vectors_[:, 1],s200,c,edgecolorsk)
_xlim(xlim)
_ylim(ylim)
绘制效果图如下:
调用ubyte文件用什么函数?
#需要导入的库,struct是一个很常用的二进制解析库
import numpy as np
import struct
def decode_idx3_ubyte(idx3_ubyte_file):#此函数用来解析idx3文件,idx3_ubyte_filec指定图像文件路径
#读取二进制数据
bin_dataopen(idx3_ubyte_file,rb).read()
#解析文件头信息,依次为魔数、图片数量、每张图片高、每张图片宽
offest0
fmt_headeriiii magic_number,num_images,num_rows,num_colsstruct.unpack_from(fmt_header,bin_data,offest)
print(魔数:%d,图片数量:%d,图片大小:%d%d % (magic_number,num_images,num_rows,num_cols))
#解析数据集
image_sizenum_rows*num_cols
offest (fmt_header)
fmt_image str(image_size) B
imagesnp.empty((num_images,num_rows,num_cols))
for i in range(num_images):
if (i 1)0000:
print(已解析%d%(i 1) 张) images[i](struct.unpack_from(fmt_image,bin_data,offest)).reshape((num_rows,num_cols))
offest (fmt_image)
return images
images是一个三维数组,images[i][a][b]表示第i张图片的倒数第a行,b列的像素
def decode_idx1_ubyte(idx1_ubyte_file):#解析idx1文件函数,idx1_ubyte_file指定标签文件路径
#读取二进制数据
bin_dataopen(idx1_ubyte_file,rb).read()
#解析文件头信息,依次为魔数和标签数
offest0
fmt_headerii
magic_number,num_imagesstruct.unpack_from(fmt_header,bin_data,offest)
print(魔数:%d,图片数量:%d张 % (magic_number,num_images))
#解析数据集
offest (fmt_header)
fmt_imageB
labelsnp.empty(num_images)
for i in range(num_images):
if (i 1)0000:
print(已解析:%d%(i 1) 张)
labels[i]struct.unpack_from(fmt_image,bin_data,offest)[0]
offest (fmt_image)
print(labels[0])
return labels
labels是一个一维数组,每个元素都一一对应images[i]