Bước 0: Mô tả sự cố
Tôi có một vấn đề phân loại, tức là tôi muốn để dự đoán một mục tiêu nhị phân dựa trên một tập hợp các tính năng số, sử dụng hồi quy logistic, và sau khi chạy một Phân tích thành phần chính (PCA).phân loại: PCA và hồi quy logistic sử dụng sklearn
Tôi có 2 bộ dữ liệu: df_train
và df_valid
(bộ huấn luyện và xác thực được đặt tương ứng) làm khung dữ liệu gấu trúc, chứa các đối tượng địa lý và mục tiêu. Bước đầu tiên, tôi đã sử dụng chức năng pandas get_dummies
để chuyển đổi tất cả các biến phân loại thành boolean. Ví dụ, tôi sẽ có:
n_train = 10
np.random.seed(0)
df_train = pd.DataFrame({"f1":np.random.random(n_train), \
"f2": np.random.random(n_train), \
"f3":np.random.randint(0,2,n_train).astype(bool),\
"target":np.random.randint(0,2,n_train).astype(bool)})
In [36]: df_train
Out[36]:
f1 f2 f3 target
0 0.548814 0.791725 False False
1 0.715189 0.528895 True True
2 0.602763 0.568045 False True
3 0.544883 0.925597 True True
4 0.423655 0.071036 True True
5 0.645894 0.087129 True False
6 0.437587 0.020218 True True
7 0.891773 0.832620 True False
8 0.963663 0.778157 False False
9 0.383442 0.870012 True True
n_valid = 3
np.random.seed(1)
df_valid = pd.DataFrame({"f1":np.random.random(n_valid), \
"f2": np.random.random(n_valid), \
"f3":np.random.randint(0,2,n_valid).astype(bool),\
"target":np.random.randint(0,2,n_valid).astype(bool)})
In [44]: df_valid
Out[44]:
f1 f2 f3 target
0 0.417022 0.302333 False False
1 0.720324 0.146756 True False
2 0.000114 0.092339 True True
Tôi muốn hiện nay để áp dụng một PCA để giảm chiều của vấn đề của tôi, sau đó sử dụng LogisticRegression
từ sklearn để đào tạo và nhận được dự đoán trên tập hợp kiểm chứng của tôi, nhưng tôi không chắc chắn các thủ tục tôi làm theo là chính xác. Dưới đây là những gì tôi làm:
Bước 1: PCA
Ý tưởng là tôi cần phải thay đổi cả đào tạo và xác nhận của tôi thiết lập cùng một cách với PCA. Nói cách khác, tôi có thể không thực hiện riêng PCA. Nếu không, chúng sẽ được chiếu trên các eigenvectors khác nhau.
from sklearn.decomposition import PCA
pca = PCA(n_components=2) #assume to keep 2 components, but doesn't matter
newdf_train = pca.fit_transform(df_train.drop("target", axis=1))
newdf_valid = pca.transform(df_valid.drop("target", axis=1)) #not sure here if this is right
Bước 2: Logistic Regression
Đó là không cần thiết, nhưng tôi thích để giữ cho mọi thứ như dataframe:
features_train = pd.DataFrame(newdf_train)
features_valid = pd.DataFrame(newdf_valid)
Và bây giờ tôi thực hiện hồi quy logistic
from sklearn.linear_model import LogisticRegression
cls = LogisticRegression()
cls.fit(features_train, df_train["target"])
predictions = cls.predict(features_valid)
tôi nghĩ rằng bước 2 là chính xác, nhưng tôi có nhiều nghi ngờ hơn về bước 1: đây có phải là cách tôi phải chuỗi PCA, sau đó là một trình phân loại?
Tôi không thấy bất kỳ vấn đề nào với quy trình. Điều gì về kết quả của bạn? Bạn có nhận được kết quả mong đợi không? – Riyaz
Một trong những hành vi bất ngờ trên dữ liệu của tôi (khác với ví dụ được hiển thị ở đây) là khi tôi tăng số lượng thành phần trong hàm PCA, ma trận nhầm lẫn của tôi trở nên tồi tệ hơn! Ngoài ra, tôi đã tự hỏi nếu "dummifying" quá nhiều biến phân loại không có bất kỳ ảnh hưởng đến kết quả? Tôi có nên loại trừ cột "mục tiêu" trong PCA không? – ldocao
Mục tiêu không phải là một phần dữ liệu của bạn. Vì vậy, loại trừ các nhãn mục tiêu trong khi sử dụng PCA. Đối với dữ liệu phân loại, bạn nên sử dụng một biểu diễn nóng được thực hiện trong sklearn. – Riyaz