python中怎么实现径向基核函数
导读:本文共4088字符,通常情况下阅读需要14分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 1、生成数据集(双月数据集)classmoon_data_class(object):def__init__(self,N,d,r,w):self.N=Nself.w=wself.d=dself.r=rdefsgn(self,x):if(x>0):return1;else:return-1;defsig(self,x):retur... ...
音频解说
目录
(为您整理了一些要点),点击可以直达。1、生成数据集(双月数据集)
classmoon_data_class(object):def__init__(self,N,d,r,w):self.N=Nself.w=wself.d=dself.r=rdefsgn(self,x):if(x>0):return1;else:return-1;defsig(self,x):return1.0/(1+np.exp(x))defdbmoon(self):N1=10*self.NN=self.Nr=self.rw2=self.w/2d=self.ddone=Truedata=np.empty(0)whiledone:#generateRectangulardatatmp_x=2*(r+w2)*(np.random.random([N1,1])-0.5)tmp_y=(r+w2)*np.random.random([N1,1])tmp=np.concatenate((tmp_x,tmp_y),axis=1)tmp_ds=np.sqrt(tmp_x*tmp_x+tmp_y*tmp_y)#generatedoublemoondata---upperidx=np.logical_and(tmp_ds>(r-w2),tmp_ds<(r+w2))idx=(idx.nonzero())[0]ifdata.shape[0]==0:data=tmp.take(idx,axis=0)else:data=np.concatenate((data,tmp.take(idx,axis=0)),axis=0)ifdata.shape[0]>=N:done=False#print(data)db_moon=data[0:N,:]#print(db_moon)#generatedoublemoondata----downdata_t=np.empty([N,2])data_t[:,0]=data[0:N,0]+rdata_t[:,1]=-data[0:N,1]-ddb_moon=np.concatenate((db_moon,data_t),axis=0)returndb_moon
2、k均值聚类
defk_means(input_cells,k_count):count=len(input_cells)#点的个数x=input_cells[0:count,0]y=input_cells[0:count,1]#随机选择K个点k=rd.sample(range(count),k_count)k_point=[[x[i],[y[i]]]foriink]#保证有序k_point.sort()globalframes#globalstepwhileTrue:km=[[]foriinrange(k_count)]#存储每个簇的索引#遍历所有点foriinrange(count):cp=[x[i],y[i]]#当前点#计算cp点到所有质心的距离_sse=[distance(k_point[j],cp)forjinrange(k_count)]#cp点到那个质心最近min_index=_sse.index(min(_sse))#把cp点并入第i簇km[min_index].append(i)#更换质心k_new=[]foriinrange(k_count):_x=sum([x[j]forjinkm[i]])/len(km[i])_y=sum([y[j]forjinkm[i]])/len(km[i])k_new.append([_x,_y])k_new.sort()#排序if(k_new!=k_point):#一直循环直到聚类中心没有变化k_point=k_newelse:returnk_point,km
3、高斯核函数
高斯核函数,主要的作用是衡量两个对象的相似度,当两个对象越接近,即a与b的距离趋近于0,则高斯核函数的值趋近于1,反之则趋近于0,换言之:
两个对象越相似,高斯核函数值就越大
作用:
用于分类时,衡量各个类别的相似度,其中sigma参数用于调整过拟合的情况,sigma参数较小时,即要求分类器,加差距很小的类别也分类出来,因此会出现过拟合的问题;
用于模糊控制时,用于模糊集的隶属度。
defgaussian(a,b,sigma):returnnp.exp(-norm(a-b)**2/(2*sigma**2))
4、求高斯核函数的方差
Sigma_Array=[]forjinrange(k_count):Sigma=[]foriinrange(len(center_array[j][0])):temp=Phi(np.array([center_array[j][0][i],center_array[j][1][i]]),np.array(center[j]))Sigma.append(temp)Sigma=np.array(Sigma)Sigma_Array.append(np.cov(Sigma))
5、显示高斯核函数计算结果
gaussian_kernel_array=[]fig=plt.figure()ax=Axes3D(fig)forjinrange(k_count):gaussian_kernel=[]foriinrange(len(center_array[j][0])):temp=Phi(np.array([center_array[j][0][i],center_array[j][1][i]]),np.array(center[j]))temp1=gaussian(temp,Sigma_Array[0])gaussian_kernel.append(temp1)gaussian_kernel_array.append(gaussian_kernel)ax.scatter(center_array[j][0],center_array[j][1],gaussian_kernel_array[j],s=20)plt.show()
6、运行结果
7、完整代码
#coding:utf-8importnumpyasnpimportpylabasplimportrandomasrdimportimageioimportmathimportrandomimportmatplotlib.pyplotaspltimportnumpyasnpimportmpl_toolkits.mplot3dfrommpl_toolkits.mplot3dimportAxes3Dfromscipyimport*fromscipy.linalgimportnorm,pinvfrommatplotlibimportpyplotaspltrandom.seed(0)#定义sigmoid函数和它的导数defsigmoid(x):return1.0/(1.0+np.exp(-x))defsigmoid_derivate(x):returnx*(1-x)#sigmoid函数的导数classmoon_data_class(object):def__init__(self,N,d,r,w):self.N=Nself.w=wself.d=dself.r=rdefsgn(self,x):if(x>0):return1;else:return-1;defsig(self,x):return1.0/(1+np.exp(x))defdbmoon(self):N1=10*self.NN=self.Nr=self.rw2=self.w/2d=self.ddone=Truedata=np.empty(0)whiledone:#generateRectangulardatatmp_x=2*(r+w2)*(np.random.random([N1,1])-0.5)tmp_y=(r+w2)*np.random.random([N1,1])tmp=np.concatenate((tmp_x,tmp_y),axis=1)tmp_ds=np.sqrt(tmp_x*tmp_x+tmp_y*tmp_y)#generatedoublemoondata---upperidx=np.logical_and(tmp_ds>(r-w2),tmp_ds<(r+w2))idx=(idx.nonzero())[0]ifdata.shape[0]==0:data=tmp.take(idx,axis=0)else:data=np.concatenate((data,tmp.take(idx,axis=0)),axis=0)ifdata.shape[0]>=N:done=False#print(data)db_moon=data[0:N,:]#print(db_moon)#generatedoublemoondata----downdata_t=np.empty([N,2])data_t[:,0]=data[0:N,0]+rdata_t[:,1]=-data[0:N,1]-ddb_moon=np.concatenate((db_moon,data_t),axis=0)returndb_moondefdistance(a,b):return(a[0]-b[0])**2+(a[1]-b[1])**2#K均值算法defk_means(input_cells,k_count):count=len(input_cells)#点的个数x=input_cells[0:count,0]y=input_cells[0:count,1]#随机选择K个点k=rd.sample(range(count),k_count)k_point=[[x[i],[y[i]]]foriink]#保证有序k_point.sort()globalframes#globalstepwhileTrue:km=[[]foriinrange(k_count)]#存储每个簇的索引#遍历所有点foriinrange(count):cp=[x[i],y[i]]#当前点#计算cp点到所有质心的距离_sse=[distance(k_point[j],cp)forjinrange(k_count)]#cp点到那个质心最近min_index=_sse.index(min(_sse))#把cp点并入第i簇km[min_index].append(i)#更换质心k_new=[]foriinrange(k_count):_x=sum([x[j]forjinkm[i]])/len(km[i])_y=sum([y[j]forjinkm[i]])/len(km[i])k_new.append([_x,_y])k_new.sort()#排序if(k_new!=k_point):#一直循环直到聚类中心没有变化k_point=k_newelse:pl.figure()pl.title("N=%d,k=%diteration"%(count,k_count))forjinrange(k_count):pl.plot([x[i]foriinkm[j]],[y[i]foriinkm[j]],color[j%4])pl.plot(k_point[j][0],k_point[j][1],dcolor[j%4])returnk_point,kmdefPhi(a,b):returnnorm(a-b)defgaussian(x,sigma):returnnp.exp(-x**2/(2*sigma**2))if__name__=='__main__':#计算平面两点的欧氏距离step=0color=['.r','.g','.b','.y']#颜色种类dcolor=['*r','*g','*b','*y']#颜色种类frames=[]N=200d=-4r=10width=6data_source=moon_data_class(N,d,r,width)data=data_source.dbmoon()#x0=[1forxinrange(1,401)]input_cells=np.array([np.reshape(data[0:2*N,0],len(data)),np.reshape(data[0:2*N,1],len(data))]).transpose()labels_pre=[[1]foryinrange(1,201)]labels_pos=[[0]foryinrange(1,201)]labels=labels_pre+labels_posk_count=2center,km=k_means(input_cells,k_count)test=Phi(input_cells[1],np.array(center[0]))print(test)test=distance(input_cells[1],np.array(center[0]))print(np.sqrt(test))count=len(input_cells)x=input_cells[0:count,0]y=input_cells[0:count,1]center_array=[]forjinrange(k_count):center_array.append([[x[i]foriinkm[j]],[y[i]foriinkm[j]]])Sigma_Array=[]forjinrange(k_count):Sigma=[]foriinrange(len(center_array[j][0])):temp=Phi(np.array([center_array[j][0][i],center_array[j][1][i]]),np.array(center[j]))Sigma.append(temp)Sigma=np.array(Sigma)Sigma_Array.append(np.cov(Sigma))gaussian_kernel_array=[]fig=plt.figure()ax=Axes3D(fig)forjinrange(k_count):gaussian_kernel=[]foriinrange(len(center_array[j][0])):temp=Phi(np.array([center_array[j][0][i],center_array[j][1][i]]),np.array(center[j]))temp1=gaussian(temp,Sigma_Array[0])gaussian_kernel.append(temp1)gaussian_kernel_array.append(gaussian_kernel)ax.scatter(center_array[j][0],center_array[j][1],gaussian_kernel_array[j],s=20)plt.show()
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:
python中怎么实现径向基核函数的详细内容,希望对您有所帮助,信息来源于网络。