• 大小: 5KB
    文件类型: .py
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: Python
  • 标签: PARZEN  K近邻  

资源简介

PARZEN窗和K近邻算法的python实现。
现实生活中常常会有这样的问题:缺乏足够的先验知识,因此难以人工标注类别或进行人工类别标注的成本太高。很自然地,我们希望计算机能代我们完成这些工作,或至少提供一些帮助。根据类别未知(没有被标记)的训练样本解决模式识别中的各种问题,称之为无监督学习。

资源截图

代码片段和文件信息

import math
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D 
#%matplotlib inline



def eudistance(x y):
    return np.sqrt(np.sum(np.square(x - y)))
    
#计算超球体的超球体
def calcualate_V(rd):
    if d == 1:
        return 2 * r
    elif d == 2:
        return math.pi * (r **2)
    elif d % 2 == 0:
        k = d / 2
        return (math.pi ** k) * (r ** d) / (math.factorial(k))
    else:
        k = (d - 1) / 2
        return (math.pi ** k) *(2 ** (2 * k + 1)) * (math.factorial(k)) * (r ** d) / (math.factorial(2 * k + 1))


def cube(u):
    u = np.abs(u)
    if (u <= 0.5).all():
        return 1
    return 0


def knn(Data X kn d f):
    n = len(Data)
    Prob = []
    for x in X:
        dis = []
        for s in Data:
            #dis.append(f(x s))
            dis.append(abs(x-s))
        dis.sort()
        v = calcualate_V(dis[kn-1]d)
        Prob.append(kn / (n * v))
    return np.array(Prob)


def parzen(Data X h d f):
    Prob = []
    n = len(Data)
    for x in X:
        p = 0.0
        for s in Data:
            p += f((s - x) / h)
        Prob.append(p / (n * (h**d)))
    return np.array(Prob)


def test_1D_KNN():
    
    Data = np.random.randn(100)
    X = np.arange(-5 5 0.01)
    plt.figure(dpi=200)

    Prob1 = knn(Data X kn=10 * 2 d=1 f=eudistance)
    ax = plt.subplot(2 2 1)
    
    ax.set_title(“n=100“)
    ax.plot(X Prob1)


    Data = np.random.randn(1000)
    Prob2 = knn(Data X kn=32 * 5 d=1 f=eudistance)
    ax = plt.subplot(2 2 2)
    ax.set_title(“n=1000“)
    ax.plot(X Prob2)

    Data = np.random.randn(10000)
    Prob3 = knn(Data X kn=100 * 8 d=1 f=eudistance)
    ax = plt.subplot(2 2 3)
    ax.set_title(“n=10000“)
    ax.plot(X Prob3)

    Data = np.random.randn(100000)
    Prob4 = knn(Data X kn=316 * 10 d=1 f=eudistance)
    ax = plt.subplot(2 2 4)
    ax.set_title(“n=100000“)
    ax.plot(X Prob4)


    plt.tight_layout() #设置默认的间距

    plt.show()


def test_1D_parzen():
    
    Data = np.random.randn(100)
    X = np.arange(-5 5 0.01)
    plt.figure(dpi=200)

    Prob1 = parzen(Data X h=2.5 d=1 f=cube)
    ax = plt.subplot(2 2 1)
    
    ax.set_title(“n=100“)
    ax.plot(X Prob1)


    Data = np.random.randn(1000)
    Prob2 = parzen(Data X h=2.5 d=1 f=cube)
    ax = plt.subplot(2 2 2)
    ax.set_title(“n=1000“)
    ax.plot(X Prob2)

    Data = np.random.ran

评论

共有 条评论

相关资源