我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python中怎么实现径向基核函数

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python中怎么实现径向基核函数

这篇文章主要介绍了python中怎么实现径向基核函数的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python中怎么实现径向基核函数文章都会有所收获,下面我们一起来看看吧。

1、生成数据集(双月数据集)

class moon_data_class(object):    def __init__(self,N,d,r,w):        self.N=N        self.w=w        self.d=d        self.r=r    def sgn(self,x):        if(x>0):            return 1;        else:            return -1;            def sig(self,x):        return 1.0/(1+np.exp(x))                def dbmoon(self):        N1 = 10*self.N        N = self.N        r = self.r        w2 = self.w/2        d = self.d        done = True        data = np.empty(0)        while done:            #generate Rectangular data            tmp_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)            #generate double moon data ---upper            idx = np.logical_and(tmp_ds > (r-w2), tmp_ds < (r+w2))            idx = (idx.nonzero())[0]                 if data.shape[0] == 0:                data = tmp.take(idx, axis=0)            else:                data = np.concatenate((data, tmp.take(idx, axis=0)), axis=0)            if data.shape[0] >= N:                done = False        #print (data)        db_moon = data[0:N, :]        #print (db_moon)        #generate double moon data ----down        data_t = np.empty([N, 2])        data_t[:, 0] = data[0:N, 0] + r        data_t[:, 1] = -data[0:N, 1] - d        db_moon = np.concatenate((db_moon, data_t), axis=0)        return db_moon

2、k均值聚类

def k_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]]] for i in k]   #保证有序    k_point.sort()    global frames    #global step    while True:        km = [[] for i in range(k_count)]      #存储每个簇的索引        #遍历所有点        for i in range(count):            cp = [x[i], y[i]]                   #当前点            #计算cp点到所有质心的距离            _sse = [distance(k_point[j], cp) for j in range(k_count)]            #cp点到那个质心最近            min_index = _sse.index(min(_sse))               #把cp点并入第i簇            km[min_index].append(i)        #更换质心               k_new = []        for i in range(k_count):            _x = sum([x[j] for j in km[i]]) / len(km[i])            _y = sum([y[j] for j in km[i]]) / len(km[i])            k_new.append([_x, _y])        k_new.sort()        #排序              if (k_new != k_point):#一直循环直到聚类中心没有变化            k_point = k_new        else:            return k_point,km

3、高斯核函数

高斯核函数,主要的作用是衡量两个对象的相似度,当两个对象越接近,即a与b的距离趋近于0,则高斯核函数的值趋近于1,反之则趋近于0,换言之:

两个对象越相似,高斯核函数值就越大

作用:

  • 用于分类时,衡量各个类别的相似度,其中sigma参数用于调整过拟合的情况,sigma参数较小时,即要求分类器,加差距很小的类别也分类出来,因此会出现过拟合的问题;

  • 用于模糊控制时,用于模糊集的隶属度。

def gaussian (a,b, sigma):    return np.exp(-norm(a-b)**2 / (2 * sigma**2))

4、求高斯核函数的方差

 Sigma_Array = []    for j in range(k_count):        Sigma = []        for i in range(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)        for j in range(k_count):        gaussian_kernel = []        for i in range(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、运行结果

python中怎么实现径向基核函数

7、完整代码

# coding:utf-8import numpy as npimport pylab as plimport random as rdimport imageioimport mathimport randomimport matplotlib.pyplot as pltimport numpy as npimport mpl_toolkits.mplot3dfrom mpl_toolkits.mplot3d import Axes3Dfrom scipy import *from scipy.linalg import norm, pinv from matplotlib import pyplot as pltrandom.seed(0)#定义sigmoid函数和它的导数def sigmoid(x):    return 1.0/(1.0+np.exp(-x))def sigmoid_derivate(x):    return x*(1-x) #sigmoid函数的导数class moon_data_class(object):    def __init__(self,N,d,r,w):        self.N=N        self.w=w              self.d=d        self.r=r           def sgn(self,x):        if(x>0):            return 1;        else:            return -1;            def sig(self,x):        return 1.0/(1+np.exp(x))                def dbmoon(self):        N1 = 10*self.N        N = self.N        r = self.r        w2 = self.w/2        d = self.d        done = True        data = np.empty(0)        while done:            #generate Rectangular data            tmp_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)            #generate double moon data ---upper            idx = np.logical_and(tmp_ds > (r-w2), tmp_ds < (r+w2))            idx = (idx.nonzero())[0]                 if data.shape[0] == 0:                data = tmp.take(idx, axis=0)            else:                data = np.concatenate((data, tmp.take(idx, axis=0)), axis=0)            if data.shape[0] >= N:                done = False        #print (data)        db_moon = data[0:N, :]        #print (db_moon)        #generate double moon data ----down        data_t = np.empty([N, 2])        data_t[:, 0] = data[0:N, 0] + r        data_t[:, 1] = -data[0:N, 1] - d        db_moon = np.concatenate((db_moon, data_t), axis=0)        return db_moondef distance(a, b):    return (a[0]- b[0]) ** 2 + (a[1] - b[1]) ** 2#K均值算法def k_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]]] for i in k]   #保证有序    k_point.sort()    global frames    #global step    while True:        km = [[] for i in range(k_count)]      #存储每个簇的索引        #遍历所有点        for i in range(count):            cp = [x[i], y[i]]                   #当前点            #计算cp点到所有质心的距离            _sse = [distance(k_point[j], cp) for j in range(k_count)]            #cp点到那个质心最近            min_index = _sse.index(min(_sse))               #把cp点并入第i簇            km[min_index].append(i)        #更换质心               k_new = []        for i in range(k_count):            _x = sum([x[j] for j in km[i]]) / len(km[i])            _y = sum([y[j] for j in km[i]]) / len(km[i])            k_new.append([_x, _y])        k_new.sort()        #排序            if (k_new != k_point):#一直循环直到聚类中心没有变化            k_point = k_new        else:            pl.figure()            pl.title("N=%d,k=%d  iteration"%(count,k_count))            for j in range(k_count):                pl.plot([x[i] for i in km[j]], [y[i] for i in km[j]], color[j%4])                pl.plot(k_point[j][0], k_point[j][1], dcolor[j%4])            return k_point,km    def Phi(a,b):    return norm(a-b)def gaussian (x, sigma):    return np.exp(-x**2 / (2 * sigma**2))        if __name__ == '__main__':        #计算平面两点的欧氏距离    step=0    color=['.r','.g','.b','.y']#颜色种类    dcolor=['*r','*g','*b','*y']#颜色种类    frames = []        N = 200    d = -4    r = 10    width = 6            data_source = moon_data_class(N, d, r, width)    data = data_source.dbmoon()       # x0 = [1 for x in range(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] for y in range(1, 201)]    labels_pos = [[0] for y in range(1, 201)]    labels=labels_pre+labels_pos            k_count = 2     center,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 = []    for j in range(k_count):                  center_array.append([[x[i] for i in km[j]], [y[i] for i in km[j]]])    Sigma_Array = []    for j in range(k_count):        Sigma = []        for i in range(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)        for j in range(k_count):        gaussian_kernel = []        for i in range(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()

关于“python中怎么实现径向基核函数”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“python中怎么实现径向基核函数”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python中怎么实现径向基核函数

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python中怎么实现径向基核函数

这篇文章主要介绍了python中怎么实现径向基核函数的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python中怎么实现径向基核函数文章都会有所收获,下面我们一起来看看吧。1、生成数据集(双月数据集)class
2023-07-05

Linux内核中双向链表怎么实现

这篇文章主要介绍了Linux内核中双向链表怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux内核中双向链表怎么实现文章都会有所收获,下面我们一起来看看吧。首先让我们看一下在 include/lin
2023-06-28

Python中怎么向函数传递列表

这篇文章主要介绍“Python中怎么向函数传递列表”,在日常操作中,相信很多人在Python中怎么向函数传递列表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中怎么向函数传递列表”的疑惑有所帮助!
2023-07-05

怎么在Python中实现函数嵌套

怎么在Python中实现函数嵌套?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。内部/内嵌函数1、定义:在一个函数的函数体内使用关键字def关键字定义一个新的函数,这个新的函
2023-06-15

python异步函数怎么实现

在Python中,可以使用asyncio模块来实现异步函数。异步函数通常以async关键字声明,其中包含await关键字来等待其他异步操作的完成。以下是一个示例,演示了如何使用异步函数来执行一个简单的异步任务:```pythonimport
2023-09-29

python中range()函数反向遍历怎么表达

本文小编为大家详细介绍“python中range()函数反向遍历怎么表达”,内容详细,步骤清晰,细节处理妥当,希望这篇“python中range()函数反向遍历怎么表达”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧
2023-06-30

python中的单向链表怎么实现

这篇文章主要介绍了python中的单向链表怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python中的单向链表怎么实现文章都会有所收获,下面我们一起来看看吧。一、单向链表概念单向链表的链接方向是单向的
2023-06-29

CSS中怎么使用径向渐变实现卡券效果

这篇文章将为大家详细讲解有关CSS中怎么使用径向渐变实现卡券效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。常见的卡券样式如下: 使用伪元素实现(Less 版本) ticket.less.ordinar
2023-06-08

python面向对象中类怎么实现

这篇文章主要介绍python面向对象中类怎么实现,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对代码格式的要求没有那么严
2023-06-14

Python中怎么实现函数的局部变量

本篇文章给大家分享的是有关Python中怎么实现函数的局部变量,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。局部变量当你在函数定义内声明变量的时候,它们与函数外具有相同名称的其
2023-06-17

Python中怎么实现一个生成器函数

Python中怎么实现一个生成器函数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.生成器在 Python 中,一边循环一边计算的机制,称为生成器(Generator);生成
2023-06-02

怎么在python中实现线程中的函数传参

这期内容当中小编将会给大家带来有关怎么在python中实现线程中的函数传参,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python有哪些常用库python常用的库:1.requesuts;2.scrap
2023-06-14

Python中怎么实现面向接口编程

本篇文章为大家展示了Python中怎么实现面向接口编程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。”面向接口编程“写 Java 的朋友耳朵已经可以听出干茧了吧,当然这个思想在 Java 中非常重
2023-06-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录