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

# -*- coding: utf-8 -*-

import numpy as np

import random

N = 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)

你可能感兴趣的:(python,线型)