2012-02-01 41 views
12
  • Tôi có ma trận dạng khối với hình dạng (4601, 58).
  • Tôi muốn chia ma trận ngẫu nhiên theo 60%, 20%, 20% chia dựa trên số hàng
  • này là dành cho nhiệm vụ Machine Learning Tôi cần
  • Có một chức năng NumPy rằng lựa chọn một cách ngẫu nhiên hàng?

Trả lời

17

bạn có thể sử dụng numpy.random.shuffle

import numpy as np 

N = 4601 
data = np.arange(N*58).reshape(-1, 58) 
np.random.shuffle(data) 

a = data[:int(N*0.6)] 
b = data[int(N*0.6):int(N*0.8)] 
c = data[int(N*0.8):] 
3

Nếu bạn muốn chọn một cách ngẫu nhiên hàng, bạn chỉ có thể sử dụng random.sample từ các tiêu chuẩn thư viện Python:

import random 

population = range(4601) # Your number of rows 
choice = random.sample(population, k) # k being the number of samples you require 

random.sample mẫu mà không cần thay thế, do đó bạn không cần phải lo lắng về hàng lặp lại kết thúc trong choice. Với một mảng được gọi là matrix, bạn có thể chọn các hàng bằng cách cắt, như sau: matrix[choice].

Tất nhiên, k có thể bằng tổng số phần tử trong tập hợp, và sau đó choice sẽ chứa thứ tự ngẫu nhiên của các chỉ mục cho các hàng của bạn. Sau đó, bạn có thể phân vùng choice như bạn vui lòng, nếu đó là tất cả những gì bạn cần.

7

Một bổ sung cho câu trả lời HYRY nếu bạn muốn xáo trộn liên tục nhiều mảng x, y, z với cùng một chiều đầu tiên: x.shape[0] == y.shape[0] == z.shape[0] == n_samples.

Bạn có thể làm:

rng = np.random.RandomState(42) # reproducible results with a fixed seed 
indices = np.arange(n_samples) 
rng.shuffle(indices) 
x_shuffled = x[indices] 
y_shuffled = y[indices] 
z_shuffled = z[indices] 

Và sau đó tiến hành với sự chia rẽ của mỗi mảng xáo trộn như trong câu trả lời của HYRY.

1

Vì bạn cần nó cho máy học, đây là một phương pháp tôi đã viết:

import numpy as np 

def split_random(matrix, percent_train=70, percent_test=15): 
    """ 
    Splits matrix data into randomly ordered sets 
    grouped by provided percentages. 

    Usage: 
    rows = 100 
    columns = 2 
    matrix = np.random.rand(rows, columns) 
    training, testing, validation = \ 
    split_random(matrix, percent_train=80, percent_test=10) 

    percent_validation 10 
    training (80, 2) 
    testing (10, 2) 
    validation (10, 2) 

    Returns: 
    - training_data: percentage_train e.g. 70% 
    - testing_data: percent_test e.g. 15% 
    - validation_data: reminder from 100% e.g. 15% 
    Created by Uki D. Lucas on Feb. 4, 2017 
    """ 

    percent_validation = 100 - percent_train - percent_test 

    if percent_validation < 0: 
     print("Make sure that the provided sum of " + \ 
     "training and testing percentages is equal, " + \ 
     "or less than 100%.") 
     percent_validation = 0 
    else: 
     print("percent_validation", percent_validation) 

    #print(matrix) 
    rows = matrix.shape[0] 
    np.random.shuffle(matrix) 

    end_training = int(rows*percent_train/100)  
    end_testing = end_training + int((rows * percent_test/100)) 

    training = matrix[:end_training] 
    testing = matrix[end_training:end_testing] 
    validation = matrix[end_testing:] 
    return training, testing, validation 

# TEST: 
rows = 100 
columns = 2 
matrix = np.random.rand(rows, columns) 
training, testing, validation = split_random(matrix, percent_train=80, percent_test=10) 

print("training",training.shape) 
print("testing",testing.shape) 
print("validation",validation.shape) 

print(split_random.__doc__) 
  • đào tạo (80, 2)
  • thử nghiệm (10, 2)
  • xác nhận (10, 2)
Các vấn đề liên quan