Trong hộp công cụ sklearn-python, có hai chức năng transform
và fit_transform
khoảng sklearn.decomposition.RandomizedPCA
. Mô tả của hai chức năng như sau
Nhưng sự khác biệt giữa chúng là gì?
Trong hộp công cụ sklearn-python, có hai chức năng transform
và fit_transform
khoảng sklearn.decomposition.RandomizedPCA
. Mô tả của hai chức năng như sau
Nhưng sự khác biệt giữa chúng là gì?
Câu trả lời:
Ở đây sự khác biệt bạn có thể sử dụng pca.transform chỉ khi bạn đã tính PCA trên ma trận
In [12]: pc2 = RandomizedPCA(n_components=3)
In [13]: pc2.transform(X) # can't transform because it does not know how to do it.
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-13-e3b6b8ea2aff> in <module>()
----> 1 pc2.transform(X)
/usr/local/lib/python3.4/dist-packages/sklearn/decomposition/pca.py in transform(self, X, y)
714 # XXX remove scipy.sparse support here in 0.16
715 X = atleast2d_or_csr(X)
--> 716 if self.mean_ is not None:
717 X = X - self.mean_
718
AttributeError: 'RandomizedPCA' object has no attribute 'mean_'
In [14]: pc2.ftransform(X)
pc2.fit pc2.fit_transform
In [14]: pc2.fit_transform(X)
Out[14]:
array([[-1.38340578, -0.2935787 ],
[-2.22189802, 0.25133484],
[-3.6053038 , -0.04224385],
[ 1.38340578, 0.2935787 ],
[ 2.22189802, -0.25133484],
[ 3.6053038 , 0.04224385]])
nếu bạn muốn sử dụng, .transform
bạn cần dạy quy tắc chuyển đổi cho pca của bạn
In [20]: pca = RandomizedPCA(n_components=3)
In [21]: pca.fit(X)
Out[21]:
RandomizedPCA(copy=True, iterated_power=3, n_components=3, random_state=None,
whiten=False)
In [22]: pca.transform(z)
Out[22]:
array([[ 2.76681156, 0.58715739],
[ 1.92831932, 1.13207093],
[ 0.54491354, 0.83849224],
[ 5.53362311, 1.17431479],
[ 6.37211535, 0.62940125],
[ 7.75552113, 0.92297994]])
In [23]:
Đặc biệt, phép biến đổi PCA áp dụng sự thay đổi cơ sở thu được khi phân rã PCA của ma trận X thành ma trận Z.
fit_transform
là sự kết hợp của hai chức năng fit
và transform
?
Trong api công cụ ước tính scikit-learning ,
fit()
: được sử dụng để tạo các tham số mô hình học tập từ dữ liệu đào tạo
transform()
: các tham số được tạo ra từ fit()
phương thức, được áp dụng trên mô hình để tạo tập dữ liệu đã chuyển đổi
fit_transform()
: kết hợp của fit()
và transform()
api trên cùng một tập dữ liệu
Kiểm tra Chương-4 từ cuốn sách này và câu trả lời từ stackexchange để rõ hơn
Các phương pháp này được sử dụng để căn giữa / quy mô đặc trưng của một dữ liệu nhất định. Về cơ bản, nó giúp chuẩn hóa dữ liệu trong một phạm vi cụ thể
Đối với điều này, chúng tôi sử dụng phương pháp Z-score.
Chúng tôi làm điều này trên tập dữ liệu đào tạo.
1. Fit (): Phương thức tính toán các tham số μ và σ và lưu chúng dưới dạng các đối tượng bên trong.
2. Transform (): Phương thức sử dụng các tham số được tính toán này áp dụng phép biến đổi cho một tập dữ liệu cụ thể.
3. Fit_transform (): tham gia phương thức fit () và biến đổi () để biến đổi tập dữ liệu.
Đoạn mã cho Tỷ lệ / Tiêu chuẩn hóa tính năng (sau train_test_split).
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit_transform(X_train)
sc.transform(X_test)
Chúng tôi áp dụng chuyển đổi tham số giống nhau (tập hợp hai tham số μ và σ (giá trị)) tương tự trên tập thử nghiệm của chúng tôi.
Sự khác biệt chung giữa các phương pháp:
Cả fit_transform và biến đổi đều trả về ma trận kỳ hạn tài liệu giống nhau.
Đây là sự khác biệt cơ bản giữa .fit()
& .fit_transform()
:
được sử dụng trong Học tập có giám sát có hai đối tượng / tham số (x, y) để phù hợp với mô hình và làm cho mô hình chạy, nơi chúng tôi biết rằng những gì chúng tôi sẽ dự đoán
được sử dụng trong Học không giám sát có một đối tượng / tham số (x), nơi chúng ta không biết, chúng ta sẽ dự đoán điều gì.
Theo thuật ngữ của giáo dân, fit_transform có nghĩa là thực hiện một số phép tính và sau đó thực hiện chuyển đổi (giả sử tính toán phương tiện của các cột từ một số dữ liệu và sau đó thay thế các giá trị bị thiếu). Vì vậy, đối với tập huấn luyện, bạn cần vừa tính toán vừa thực hiện phép biến đổi.
Nhưng đối với tập thử nghiệm, Học máy áp dụng dự đoán dựa trên những gì đã học được trong tập huấn luyện và vì vậy nó không cần tính toán, nó chỉ thực hiện chuyển đổi.
Tất cả các câu trả lời đều khá tốt, nhưng tôi sẽ nhấn mạnh vào TẠI SAO và KHI NÀO sử dụng từng phương pháp.
fit (), biến đổi (), fit_transform ()
Thông thường, chúng tôi gặp vấn đề học tập có giám sát với (X, y) là tập dữ liệu và chúng tôi chia nó thành dữ liệu đào tạo và dữ liệu kiểm tra:
import numpy as np
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y)
X_train_vectorized = model.fit_transform(X_train)
X_test_vectorized = model.transform(X_test)
Hãy tưởng tượng chúng ta đang lắp một tokenizer, nếu chúng ta vừa với X, chúng ta đang đưa dữ liệu thử nghiệm vào tokenizer, nhưng tôi đã gặp lỗi này nhiều lần!
Điều chính xác là CHỈ phù hợp với X_train , vì bạn không biết "dữ liệu tương lai của mình" nên bạn không thể sử dụng dữ liệu X_test để lắp bất cứ thứ gì!
Sau đó, bạn có thể chuyển đổi dữ liệu thử nghiệm của mình, nhưng riêng biệt, đó là lý do tại sao có các phương pháp khác nhau.
Mẹo cuối cùng: X_train_transformed = model.fit_transform(X_train)
tương đương với:,
X_train_transformed = model.fit(X_train).transform(X_train)
nhưng mẹo đầu tiên nhanh hơn.
Lưu ý rằng những gì tôi gọi là "mô hình" thường sẽ là một bộ chia tỷ lệ, một máy biến áp tfidf, một loại vectorizer khác, một tokenizer ...
est.fit_transform(X)
luôn tương đương vớiest.fit(X).transform(X)
, nhưng thường nhanh hơn.