python 生成测试数据点(带有标签的线性可分和线性不可分)

来源:互联网 发布:omnigraffle 网络模板 编辑:程序博客网 时间:2024/05/29 07:46
<span style="font-family: Arial, Helvetica, sans-serif;"># -*- coding: utf-8 -*-</span>
import numpy as npimport randomN = 10 #生成训练数据的个数# AX=0 相当于matlab中 null(a','r')def null(a, rtol=1e-5):    u, s, v = np.linalg.svd(a)    rank = (s > rtol*s[0]).sum()    return rank, v[rank:].T.copy()# 符号函数,之后要进行向量化    def sign(x):    if x > 0:        return 1    elif x == 0:        return 0    elif x < 0:        return -1#noisy=False,那么就会生成N的dim维的线性可分数据X,标签为y#noisy=True, 那么生成的数据是线性不可分的,标签为y      def mk_data(N, noisy=False):    rang = [-1,1]    dim = 2        X=np.random.rand(dim,N)*(rang[1]-rang[0])+rang[0]        while True:        Xsample = np.concatenate((np.ones((1,dim)), np.random.rand(dim,dim)*(rang[1]-rang[0])+rang[0]))        k,w=null(Xsample.T)        y = sign(np.dot(w.T,np.concatenate((np.ones((1,N)), X))))        if np.all(y):            break                if noisy == True:        idx = random.sample(range(1,N), N/10)        y[idx] = -y[idx]        return (X,y,w)    if __name__ == '__main__':    sign = np.vectorize(sign)    X,y,w = mk_data(10)    


0 0
原创粉丝点击