Tôi muốn triển khai thuật toán học máy trong scikit learn, nhưng tôi không hiểu tham số random_state
này làm gì? Tại sao tôi nên sử dụng nó?
Tôi cũng không thể hiểu số giả ngẫu nhiên là gì.
Tôi muốn triển khai thuật toán học máy trong scikit learn, nhưng tôi không hiểu tham số random_state
này làm gì? Tại sao tôi nên sử dụng nó?
Tôi cũng không thể hiểu số giả ngẫu nhiên là gì.
Câu trả lời:
train_test_split
chia các mảng hoặc ma trận thành các tập con ngẫu nhiên và kiểm tra. Điều đó có nghĩa là mỗi khi bạn chạy nó mà không chỉ định random_state
, bạn sẽ nhận được một kết quả khác, đây là hành vi dự kiến. Ví dụ:
Chạy 1:
>>> a, b = np.arange(10).reshape((5, 2)), range(5)
>>> train_test_split(a, b)
[array([[6, 7],
[8, 9],
[4, 5]]),
array([[2, 3],
[0, 1]]), [3, 4, 2], [1, 0]]
Chạy 2
>>> train_test_split(a, b)
[array([[8, 9],
[4, 5],
[0, 1]]),
array([[6, 7],
[2, 3]]), [4, 2, 0], [3, 1]]
Nó thay đổi. Mặt khác, nếu bạn sử dụng random_state=some_number
, thì bạn có thể đảm bảo rằng đầu ra của Run 1 sẽ bằng với đầu ra của Run 2 , tức là phần tách của bạn sẽ luôn giống nhau. Không quan trọng random_state
con số thực tế là 42, 0, 21, ... Điều quan trọng là mỗi khi bạn sử dụng 42, bạn sẽ luôn nhận được cùng một đầu ra trong lần đầu tiên bạn thực hiện phân tách. Điều này hữu ích nếu bạn muốn kết quả có thể lặp lại, ví dụ như trong tài liệu, để mọi người luôn có thể thấy các số giống nhau khi họ chạy các ví dụ. Trong thực tế tôi sẽ nói, bạn nên đặt random_state
số cố định trong khi kiểm tra công cụ, nhưng sau đó loại bỏ nó trong sản xuất nếu bạn thực sự cần một sự phân chia ngẫu nhiên (và không cố định).
Về câu hỏi thứ hai của bạn, trình tạo số giả ngẫu nhiên là trình tạo số tạo ra các số gần như thực sự ngẫu nhiên. Tại sao chúng không thực sự ngẫu nhiên nằm ngoài phạm vi của câu hỏi này và có lẽ sẽ không có vấn đề gì trong trường hợp của bạn, bạn có thể xem ở đây để biết thêm chi tiết.
Nếu bạn không chỉ định random_state
mã trong mã của mình, thì mỗi lần bạn chạy (thực thi) mã của mình, một giá trị ngẫu nhiên mới sẽ được tạo và các bộ dữ liệu kiểm tra và huấn luyện sẽ có các giá trị khác nhau mỗi lần.
Tuy nhiên, nếu một giá trị cố định được gán như thế random_state = 42
thì cho dù bạn có thực thi mã của mình bao nhiêu lần thì kết quả sẽ giống nhau .ie, cùng các giá trị trong tập dữ liệu thử nghiệm và kiểm tra.
Nếu bạn không đề cập đến Random_state trong mã, thì bất cứ khi nào bạn thực thi mã của mình, một giá trị ngẫu nhiên mới sẽ được tạo và các bộ dữ liệu kiểm tra và huấn luyện sẽ có các giá trị khác nhau mỗi lần.
Tuy nhiên, nếu bạn sử dụng một giá trị cụ thể cho Random_state (Random_state = 1 hoặc bất kỳ giá trị nào khác) mỗi khi kết quả sẽ giống nhau, tức là, cùng các giá trị trong bộ dữ liệu thử nghiệm và thử nghiệm. Tham khảo mã dưới đây:
import pandas as pd
from sklearn.model_selection import train_test_split
test_series = pd.Series(range(100))
size30split = train_test_split(test_series,random_state = 1,test_size = .3)
size25split = train_test_split(test_series,random_state = 1,test_size = .25)
common = [element for element in size25split[0] if element in size30split[0]]
print(len(common))
Không quan trọng bạn chạy mã bao nhiêu lần, đầu ra sẽ là 70.
70
Cố gắng loại bỏ Random_state và chạy mã.
import pandas as pd
from sklearn.model_selection import train_test_split
test_series = pd.Series(range(100))
size30split = train_test_split(test_series,test_size = .3)
size25split = train_test_split(test_series,test_size = .25)
common = [element for element in size25split[0] if element in size30split[0]]
print(len(common))
Bây giờ ở đây đầu ra sẽ khác nhau mỗi khi bạn thực thi mã.
số Random_state phân chia các tập dữ liệu kiểm tra và huấn luyện một cách ngẫu nhiên. Ngoài những gì được giải thích ở đây, điều quan trọng cần nhớ là giá trị Random_state có thể có ảnh hưởng đáng kể đến chất lượng mô hình của bạn (về chất lượng tôi về cơ bản có nghĩa là chính xác để dự đoán). Ví dụ: Nếu bạn lấy một tập dữ liệu nhất định và huấn luyện mô hình hồi quy với nó, mà không chỉ định giá trị Random_state, có khả năng mọi lúc, bạn sẽ nhận được kết quả chính xác khác cho mô hình được đào tạo của mình trên dữ liệu thử nghiệm. Vì vậy, điều quan trọng là tìm giá trị Random_state tốt nhất để cung cấp cho bạn mô hình chính xác nhất. Và sau đó, con số đó sẽ được sử dụng để tái tạo mô hình của bạn trong một dịp khác, chẳng hạn như một thí nghiệm nghiên cứu khác. Làm như vậy,
for j in range(1000):
X_train, X_test, y_train, y_test = train_test_split(X, y , random_state =j, test_size=0.35)
lr = LarsCV().fit(X_train, y_train)
tr_score.append(lr.score(X_train, y_train))
ts_score.append(lr.score(X_test, y_test))
J = ts_score.index(np.max(ts_score))
X_train, X_test, y_train, y_test = train_test_split(X, y , random_state =J, test_size=0.35)
M = LarsCV().fit(X_train, y_train)
y_pred = M.predict(X_test)`
Nếu không có ngẫu nhiên được cung cấp, hệ thống sẽ sử dụng ngẫu nhiên được tạo bên trong. Vì vậy, khi bạn chạy chương trình nhiều lần, bạn có thể thấy các điểm dữ liệu kiểm tra / huấn luyện khác nhau và hành vi sẽ không thể đoán trước. Trong trường hợp, bạn gặp sự cố với mô hình của mình, bạn sẽ không thể tạo lại mô hình đó vì bạn không biết số ngẫu nhiên được tạo khi bạn chạy chương trình.
Nếu bạn thấy Trình phân loại cây - DT hoặc RF, họ sẽ cố gắng xây dựng thử bằng cách sử dụng một kế hoạch tối ưu. Mặc dù hầu hết các lần kế hoạch này có thể giống nhau, có thể có những trường hợp cây có thể khác nhau và do đó, dự đoán. Khi bạn cố gắng gỡ lỗi mô hình của mình, bạn có thể không thể tạo lại cùng một thể hiện mà Cây được tạo. Vì vậy, để tránh tất cả những rắc rối này, chúng tôi sử dụng Random_state trong khi xây dựng Quyết định phân loại hoặc RandomForestClassifier.
Tái bút: Bạn có thể đi sâu một chút về cách Cây được xây dựng trong Quyết định để hiểu rõ hơn về điều này.
Randomstate về cơ bản được sử dụng để tái tạo vấn đề của bạn giống nhau mỗi khi nó được chạy. Nếu bạn không sử dụng ngẫu nhiên trong bộ tách đơn, mỗi lần bạn thực hiện phân tách, bạn có thể nhận được một tập hợp các điểm dữ liệu kiểm tra và kiểm tra khác nhau và sẽ không giúp bạn gỡ lỗi trong trường hợp bạn gặp sự cố.
Từ Đốc:
Nếu int, Randomstate là hạt giống được sử dụng bởi trình tạo số ngẫu nhiên; Nếu đối tượng RandomState, Randomstate là trình tạo số ngẫu nhiên; Nếu Không, trình tạo số ngẫu nhiên là phiên bản RandomState được sử dụng bởi np.random.
sklearn.model_selection.train_test_split(*arrays, **options)[source]
Tách các mảng hoặc ma trận thành các tập con ngẫu nhiên và kiểm tra
Parameters: ...
random_state : int, RandomState instance or None, optional (default=None)
Nếu int, Random_state là hạt giống được sử dụng bởi trình tạo số ngẫu nhiên; Nếu đối tượng RandomState, Random_state là trình tạo số ngẫu nhiên; Nếu Không, trình tạo số ngẫu nhiên là đối tượng RandomState được sử dụng bởi np.random. nguồn: http://scikit-learn.org/urdy/modules/generated/sklearn.model_selection.train_test_split.html
'' 'Về trạng thái ngẫu nhiên, nó được sử dụng trong nhiều thuật toán ngẫu nhiên trong sklearn để xác định hạt ngẫu nhiên được truyền cho bộ tạo số giả ngẫu nhiên. Do đó, nó không chi phối bất kỳ khía cạnh nào trong hành vi của thuật toán. Kết quả là, các giá trị trạng thái ngẫu nhiên thực hiện tốt trong bộ xác thực không tương ứng với các giá trị trạng thái sẽ hoạt động tốt trong một bộ thử nghiệm mới, chưa thấy. Thật vậy, tùy thuộc vào thuật toán, bạn có thể thấy các kết quả hoàn toàn khác nhau bằng cách thay đổi thứ tự các mẫu đào tạo. '' 'Nguồn: /stats/263999/is-random-state-a-parameter -để điều chỉnh