sự khác biệt giữa 'biến đổi' và 'fit_transform' trong sklearn là gì


115

Trong hộp công cụ sklearn-python, có hai chức năng transformfit_transformkhoảng sklearn.decomposition.RandomizedPCA. Mô tả của hai chức năng như sau

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Nhưng sự khác biệt giữa chúng là gì?


5
est.fit_transform(X)luôn tương đương với est.fit(X).transform(X), nhưng thường nhanh hơn.
Fred Foo

Câu trả lời:


22

Ở đâ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, .transformbạ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.


Tôi đã sửa đổi câu hỏi của mình. Hai hàm trả về cùng một loại giá trị.
tqjustc

2
bạn có nghĩa là đó fit_transformlà sự kết hợp của hai chức năng fittransform?
tqjustc

6
Nếu bạn sử dụng phù hợp và biến đổi trên cùng một ma trận thì có. Không phải nếu bạn phù hợp với ma trận x và sau đó biến đổi ma trận z
Donbeo

Dòng Trong [14] nói "ftransform", đó là gì?
Rajdeep Biswas

92

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()transform()api trên cùng một tập dữ liệu

nhập mô tả hình ảnh ở đây

Kiểm tra Chương-4 từ cuốn sách này và câu trả lời từ stackexchange để rõ hơn


54

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.

Điểm Z

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.


1
Cảm ơn bạn vì lời giải thích này. Tôi tò mò liệu các giá trị 'phù hợp' có được tiếp tục và điều này đã giúp ích!
Adib

2
+1 cho ví dụ về mã. Tôi đã nhầm lẫn không biết bạn có thể sử dụng fit_transform trên tập đoàn tàu và sau đó biến đổi tập kiểm tra hay bạn có cần phù hợp riêng trên xe lửa hay không
Vivek

2
fit_tranform (..) không thể được sử dụng cho X_test vì kiểm tra thử nghiệm phải sử dụng μ và σ được tính toán từ tập dữ liệu X_train. fit_tranform (..) chỉ có thể được sử dụng trên tập dữ liệu huấn luyện. Xin vui lòng sửa chữa sự hiểu biết của tôi.
daya

1
Ư, bạn đung. Chỉ có thể sử dụng biến đổi (..) trong bài kiểm tra vì nó sử dụng các tham số đã học từ X_train để chuẩn hóa dữ liệu
X_test

7

Sự khác biệt chung giữa các phương pháp:

  • fit (raw_documents [, y]): Tìm hiểu từ điển từ vựng của tất cả các mã thông báo trong tài liệu thô.
  • fit_transform (raw_documents [, y]): Tìm hiểu từ điển từ vựng và trả về ma trận từ-tài liệu. Điều này tương đương với sự phù hợp theo sau bởi sự biến đổi, nhưng được triển khai hiệu quả hơn.
  • biến đổi (raw_documents): Chuyển đổi tài liệu sang ma trận tài liệu. Mã thông báo trích xuất đếm trong số các tài liệu văn bản thô bằng cách sử dụng từ vựng được trang bị phù hợp hoặc từ vựng được cung cấp cho hàm tạo.

Cả fit_transform và biến đổi đều trả về ma trận kỳ hạn tài liệu giống nhau.

Nguồn


4

Đây là sự khác biệt cơ bản giữa .fit()& .fit_transform():

.Phù hợp():

đượ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

.fit_transform ():

đượ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ì.


Nó không chính xác lắm; fit () cũng có thể được sử dụng trong học tập không giám sát. Nhưng nếu bạn đang cố gắng đơn giản hóa quá mức chỉ vì mục đích ngắn gọn, thì đó là một cách hay để giải thích cho người mới bắt đầu.
Rajdeep Biswas

1

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.


0

Tại sao và Khi nào sử dụng mỗi cá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 ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.