最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中如何實現(xiàn)徑向基核函數(shù)

 更新時間:2023年02月20日 10:16:56   作者:柳葉吳鉤  
這篇文章主要介紹了python中如何實現(xiàn)徑向基核函數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

1、生成數(shù)據(jù)集(雙月數(shù)據(jù)集)

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)      #點的個數(shù)
    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]]                   #當(dāng)前點
            #計算cp點到所有質(zhì)心的距離
            _sse = [distance(k_point[j], cp) for j in range(k_count)]
            #cp點到那個質(zhì)心最近
            min_index = _sse.index(min(_sse))   
            #把cp點并入第i簇
            km[min_index].append(i)
        #更換質(zhì)心
       
        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):#一直循環(huán)直到聚類中心沒有變化
            k_point = k_new
        else:
            return k_point,km

3、高斯核函數(shù)

高斯核函數(shù),主要的作用是衡量兩個對象的相似度,當(dāng)兩個對象越接近,即a與b的距離趨近于0,則高斯核函數(shù)的值趨近于1,反之則趨近于0,換言之:

兩個對象越相似,高斯核函數(shù)值就越大

作用:

  • 用于分類時,衡量各個類別的相似度,其中sigma參數(shù)用于調(diào)整過擬合的情況,sigma參數(shù)較小時,即要求分類器,加差距很小的類別也分類出來,因此會出現(xiàn)過擬合的問題;
  • 用于模糊控制時,用于模糊集的隸屬度。
def gaussian (a,b, sigma):
    return np.exp(-norm(a-b)**2 / (2 * sigma**2))

4、求高斯核函數(shù)的方差

 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、顯示高斯核函數(shù)計算結(jié)果

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、運行結(jié)果

在這里插入圖片描述

7、完整代碼

# coding:utf-8
import numpy as np
import pylab as pl
import random as rd
import imageio
import math
import random
import matplotlib.pyplot as plt
import numpy as np
import mpl_toolkits.mplot3d
from mpl_toolkits.mplot3d import Axes3D

from scipy import *
from scipy.linalg import norm, pinv
 
from matplotlib import pyplot as plt
random.seed(0)

#定義sigmoid函數(shù)和它的導(dǎo)數(shù)
def sigmoid(x):
    return 1.0/(1.0+np.exp(-x))
def sigmoid_derivate(x):
    return x*(1-x) #sigmoid函數(shù)的導(dǎo)數(shù)


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

def 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)      #點的個數(shù)
    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]]                   #當(dāng)前點
            #計算cp點到所有質(zhì)心的距離
            _sse = [distance(k_point[j], cp) for j in range(k_count)]
            #cp點到那個質(zhì)心最近
            min_index = _sse.index(min(_sse))   
            #把cp點并入第i簇
            km[min_index].append(i)
        #更換質(zhì)心
       
        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):#一直循環(huán)直到聚類中心沒有變化
            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()

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決Django Static內(nèi)容不能加載顯示的問題

    解決Django Static內(nèi)容不能加載顯示的問題

    今天小編就為大家分享一篇解決Django Static內(nèi)容不能加載顯示的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python+matplotlib實現(xiàn)量場圖的繪制

    Python+matplotlib實現(xiàn)量場圖的繪制

    matplotlib是基于Python語言的開源項目,pyplot提供一系列繪制2D圖形的方法。本文將帶大家學(xué)習(xí)matplotlib.pyplot.quiver()相關(guān)方法屬性并通過其繪制量場圖
    2021-12-12
  • 使用Python?matplotlib繪制簡單的柱形圖、折線圖和直線圖

    使用Python?matplotlib繪制簡單的柱形圖、折線圖和直線圖

    Matplotlib是Python的繪圖庫, 它可與NumPy一起使用,提供了一種有效的MatLab開源替代方案,下面這篇文章主要給大家介紹了關(guān)于使用Python?matplotlib繪制簡單的柱形圖、折線圖和直線圖的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Python入門之布爾值詳解

    Python入門之布爾值詳解

    Python中布爾值(Booleans)表示以下兩個值之一:True或False。本文主要介紹布爾值(Booleans)的使用,和使用時需要注意的地方,需要的可以參考一下
    2023-02-02
  • Python re.split方法分割字符串的實現(xiàn)示例

    Python re.split方法分割字符串的實現(xiàn)示例

    本文主要介紹了Python re.split方法分割字符串的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Python lambda表達式原理及用法解析

    Python lambda表達式原理及用法解析

    這篇文章主要介紹了Python lambda表達式原理及用法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • nlp自然語言處理基于SVD的降維優(yōu)化學(xué)習(xí)

    nlp自然語言處理基于SVD的降維優(yōu)化學(xué)習(xí)

    這篇文章主要為大家介紹了nlp自然語言處理基于SVD的降維優(yōu)化學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • 解決python3.5 正常安裝 卻不能直接使用Tkinter包的問題

    解決python3.5 正常安裝 卻不能直接使用Tkinter包的問題

    今天小編就為大家分享一篇解決python3.5 正常安裝 卻不能直接使用Tkinter包的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python實現(xiàn)剪刀石頭布小游戲(與電腦對戰(zhàn))

    Python實現(xiàn)剪刀石頭布小游戲(與電腦對戰(zhàn))

    這篇文章給大家分享Python基礎(chǔ)實現(xiàn)與電腦對戰(zhàn)的剪刀石頭布小游戲,練習(xí)if while輸入和輸出,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2019-12-12
  • 運行Python編寫的程序方法實例

    運行Python編寫的程序方法實例

    在本篇文章里小編給大家整理了關(guān)于運行Python編寫的程序方法實例內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-10-10

最新評論

桂东县| 敦化市| 中方县| 南康市| 萨迦县| 西峡县| 安龙县| 兴海县| 新和县| 栾城县| 泽库县| 定安县| 长沙市| 广南县| 黔西县| 台北市| 区。| 南宫市| 承德市| 东丽区| 鸡泽县| 皮山县| 梅州市| 阿坝县| 永修县| 确山县| 老河口市| 武胜县| 沙洋县| 刚察县| 黄冈市| 隆尧县| 大冶市| 响水县| 肃宁县| 东明县| 宝山区| 苍溪县| 延庆县| 内乡县| 盐津县|