Случайная выборка из нескольких векторов в python

#python #random #sgd #stochastic-gradient

#python #Случайный #sgd #стохастический-градиент

Вопрос:

Итак, у меня есть задание для code Steachastic gradient decent, и, по сути, я нахожу, что это небольшая проблема для случайной выборки из нескольких векторов при сохранении порядка. Мой код следующий:

 import numpy as np 
import matplotlib.pyplot as plt
import random

x = np.array([0.,0.,0.,100.,100.,300.,300.,900.,900.,900.])
y = np.array([0.,0.,1.,0.,1.,1.,1.,0.,1.,1.])


def f(b0,b1,x,y):
    vec = [y[i]*np.log(1/(1 np.exp(-b0-b1*x[i])))   (1-y[i])*np.log(1 - (1/(1 np.exp(-b0-b1*x[i])))) for i in range(len(y))]
    return sum(vec)

def dervf0(b0,b1,x,y):
    vec = [-y[i]   (1/(1 np.exp(-b0-b1*x[i]))) for i in range(len(y))]
    return sum(vec)
def dervf1(b0,b1,x,y):
    vec = [-x[i]*(y[i]-(1/(1 np.exp(-b0-b1*x[i])))) for i in range(len(y))]
    return sum(vec)

def SGD(v,x,y,tol,maxiter):
    x = #random selection
    y= #random selection
    for i in range(maxiter):
        theta_new = v - 0.001*np.array(
            [dervf0(v[0], v[1], x, y),
             dervf1(v[0], v[1], x, y)])
        if np.linalg.norm(theta_new - v) < tol: 
            break
        else:
            v = theta_new
            #print('it{}tvt{}ttheta_newt{}'.format(i, v, theta_new))
    return theta_new,i
  

Как вы можете видеть, у меня есть 2 вектора, x и y, и они связаны, например, x [0] — это эксперимент, который дал нам y [0] = 0. На мой взгляд, нет смысла произвольно выбирать без структуры, когда здесь. То, что я изо всех сил пытаюсь сделать, — это функция SGD, где я хочу n-точки x и n-точки y, но структурированные правильно! любая помощь приветствуется!

Y

Ответ №1:

Вы можете получить список индексов для выборки, используя следующее-

 import random

x = ['This', 'is', 'a', 'random', 'sampling', 'example']

n = len(x)
k = 5
indices_to_sample = sorted(random.sample(range(n),k)) # Chooses k out of n indices and sorts them
for i in indices_to_sample:
    print(x[i]) # Gets x at index i
  

Подробнее читайте в random.sample docs