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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值