Mở rộng đa thức trong Python

Bài viết này sẽ giải thích cách đạt được kết quả tương tự như lớp PolynomialFeatures của thư viện scikit-learn. Kết quả sẽ được tính từ đầu bằng Python

Kết quả mong muốn là gì?

Trước khi bắt đầu chia nhỏ quá trình thực hiện, trước tiên chúng ta hãy hiểu kết quả mong muốn

Với tập dữ liệu có hai tính năng, một phiên bản thuộc tập dữ liệu có thể được biểu diễn dưới dạng vectơ hai chiều, \(x = \begin{bmatrix} x_1 & x_2 \end{bmatrix}\)

Nếu các tính năng đa thức lên đến mức độ thứ ba được thêm vào tập dữ liệu, kết quả sẽ như sau

$$ x = \begin{bmatrix} x_1 & x_1^2 & x_1^3 & x_2 & x_2^2 & x_2 ^3 & x_1x_2 & x_1^2x_2 & x_1x_2^2 \end{bmatrix} $$

Do đó, không chỉ các đối tượng địa lý có cấp độ bắt buộc được thêm vào tập dữ liệu (\( x_1^2 , x_1^3 , x_2^2 ,x_2 ^3\)), mà còn tất cả các kết hợp có thể có của các đối tượng địa lý cho tất cả các cấp độ

Thực hiện

Chúng tôi sẽ bắt đầu bằng cách tính toán các tính năng đa thức cho một mức độ duy nhất

Tính toán số lượng kết hợp có thể, điều này sẽ được sử dụng để xác định số lần lặp lại cần thiết cho bước tiếp theo

Tính toán tất cả các kết hợp có thể có của các tính năng trong tập dữ liệu và lưu trữ chúng trong danh sách

Bây giờ chúng tôi có một danh sách lưu trữ tất cả các kết hợp có thể có của các tính năng cho mức độ đã chỉ định. Tuy nhiên, không phải tất cả các tổ hợp này đều là một phần của khai triển đa thức cho bậc đã cho. Do đó, chúng tôi sẽ sử dụng hàm delta Kronecker để loại bỏ các thuật ngữ không tạo thành một phần của phần mở rộng

Chức năng đồng bằng Kronecker

$$ \delta_{ij} = \begin{cases}
0 & \text{if $ i\neq j$} \\
1 & \text{if $ i = j$}
\end{cases}$$

trong đó thuộc tính “options” là một danh sách chứa n-bộ chỉ định số mũ của từng đối tượng trong tập dữ liệu cho mỗi số hạng trong khai triển đa thức

Bây giờ chúng ta có thể sử dụng các số mũ được lưu trữ trong thuộc tính “tùy chọn” để tính toán các số hạng thực tế trong khai triển đa thức

Sau khi hoàn thành bước này, chúng tôi đã tính toán các tính năng đa thức cho một mức độ duy nhất

Để tính các đặc trưng đa thức cho tất cả các bậc cho đến và bao gồm cả bậc đã chỉ định, chúng ta chỉ cần tính các đặc trưng đa thức cho từng bậc riêng lẻ và sau đó thêm tất cả các đặc trưng vào tập dữ liệu

Quá trình này rất đơn giản nên tôi sẽ không giải thích ở đây, tuy nhiên, cách thực hiện đầy đủ có sẵn tại đây

Thông thường, các tính năng đầu vào cho một nhiệm vụ lập mô hình dự đoán tương tác theo những cách không mong muốn và thường là phi tuyến tính

Những tương tác này có thể được xác định và mô hình hóa bằng thuật toán học tập. Một cách tiếp cận khác là thiết kế các tính năng mới phơi bày các tương tác này và xem liệu chúng có cải thiện hiệu suất mô hình hay không. Ngoài ra, các phép biến đổi như nâng các biến đầu vào lên một lũy thừa có thể giúp thể hiện tốt hơn các mối quan hệ quan trọng giữa các biến đầu vào và biến mục tiêu

Các tính năng này được gọi là các tính năng tương tác và đa thức và cho phép sử dụng các thuật toán mô hình hóa đơn giản hơn vì một số độ phức tạp của việc diễn giải các biến đầu vào và các mối quan hệ của chúng được đẩy trở lại giai đoạn chuẩn bị dữ liệu. Đôi khi các tính năng này có thể dẫn đến hiệu suất mô hình được cải thiện, mặc dù phải trả giá bằng việc thêm hàng nghìn hoặc thậm chí hàng triệu biến đầu vào bổ sung

Trong hướng dẫn này, bạn sẽ khám phá cách sử dụng các phép biến đổi đặc trưng đa thức cho kỹ thuật đặc trưng với các biến đầu vào số

Sau khi hoàn thành hướng dẫn này, bạn sẽ biết

  • Một số thuật toán học máy thích hơn hoặc hoạt động tốt hơn với các tính năng nhập đa thức
  • Cách sử dụng phép biến đổi đặc trưng đa thức để tạo phiên bản mới của biến đầu vào cho mô hình dự đoán
  • Mức độ của đa thức ảnh hưởng như thế nào đến số lượng tính năng đầu vào được tạo bởi phép biến đổi

Bắt đầu dự án của bạn với cuốn sách mới Chuẩn bị dữ liệu cho máy học của tôi, bao gồm các hướng dẫn từng bước và các tệp mã nguồn Python cho tất cả các ví dụ

Bắt đầu nào

Mở rộng đa thức trong Python

Cách sử dụng biến đổi tính năng đa thức cho máy học
Ảnh của D Coetzee, bảo lưu một số quyền.

Hướng dẫn tổng quan

Hướng dẫn này được chia thành năm phần;

  1. Tính năng đa thức
  2. Biến đổi tính năng đa thức
  3. Bộ dữ liệu sonar
  4. Ví dụ biến đổi tính năng đa thức
  5. Hiệu của bậc đa thức

Tính năng đa thức

Các tính năng đa thức là những tính năng được tạo bằng cách nâng các tính năng hiện có lên một số mũ

Ví dụ: nếu tập dữ liệu có một đối tượng đầu vào X, thì đối tượng đa thức sẽ là phần bổ sung của đối tượng mới (cột) trong đó các giá trị được tính bằng cách bình phương các giá trị trong X, e. g. X^2. Quá trình này có thể được lặp lại cho từng biến đầu vào trong tập dữ liệu, tạo ra một phiên bản đã chuyển đổi của từng biến.

Như vậy, các tính năng đa thức là một loại kỹ thuật tính năng, e. g. việc tạo ra các tính năng đầu vào mới dựa trên các tính năng hiện có

“Bậc” của đa thức được sử dụng để kiểm soát số lượng các tính năng được thêm vào, e. g. bậc 3 sẽ thêm hai biến mới cho mỗi biến đầu vào. Thông thường một mức độ nhỏ được sử dụng như 2 hoặc 3

Nói chung, việc sử dụng d lớn hơn 3 hoặc 4 là bất thường vì đối với các giá trị lớn của d, đường cong đa thức có thể trở nên quá linh hoạt và có thể có một số hình dạng rất lạ

— Trang 266, Giới thiệu về học tập thống kê với các ứng dụng trong R, 2014

Người ta cũng thường thêm các biến mới đại diện cho sự tương tác giữa các tính năng, e. g một cột mới đại diện cho một biến nhân với một biến khác. Điều này cũng có thể được lặp lại cho mỗi biến đầu vào để tạo ra một biến “tương tác” mới cho mỗi cặp biến đầu vào

Phiên bản bình phương hoặc lập phương của một biến đầu vào sẽ thay đổi phân phối xác suất, phân tách các giá trị nhỏ và lớn, một phân tách được tăng theo kích thước của số mũ

Sự tách biệt này có thể giúp một số thuật toán máy học đưa ra dự đoán tốt hơn và phổ biến đối với các tác vụ lập mô hình dự đoán hồi quy và nói chung là các tác vụ có biến đầu vào là số

Các thuật toán tuyến tính điển hình, chẳng hạn như hồi quy tuyến tính và hồi quy logistic, đáp ứng tốt với việc sử dụng các biến đầu vào đa thức

Hồi quy tuyến tính là tuyến tính trong các tham số mô hình và việc thêm các thuật ngữ đa thức vào mô hình có thể là một cách hiệu quả để cho phép mô hình xác định các mẫu phi tuyến tính

— Trang 11, Lựa chọn và kỹ thuật tính năng, 2019

Ví dụ: khi được sử dụng làm đầu vào cho thuật toán hồi quy tuyến tính, phương pháp này được gọi rộng hơn là hồi quy đa thức

Hồi quy đa thức mở rộng mô hình tuyến tính bằng cách thêm các yếu tố dự đoán bổ sung, thu được bằng cách nâng từng yếu tố dự đoán ban đầu lên lũy thừa. Ví dụ: hồi quy bậc ba sử dụng ba biến X, X2 và X3 làm yếu tố dự báo. Cách tiếp cận này cung cấp một cách đơn giản để cung cấp sự phù hợp phi tuyến tính cho dữ liệu

— Trang 265, Giới thiệu về Học tập Thống kê với Ứng dụng trong R, 2014

Bạn muốn bắt đầu với việc chuẩn bị dữ liệu?

Tham gia khóa học xử lý sự cố email miễn phí trong 7 ngày của tôi ngay bây giờ (có mã mẫu)

Nhấp để đăng ký và cũng nhận được phiên bản PDF Ebook miễn phí của khóa học

Tải xuống khóa học nhỏ MIỄN PHÍ của bạn

Biến đổi tính năng đa thức

Biến đổi các tính năng đa thức có sẵn trong thư viện học máy Python scikit-learning thông qua lớp PolynomialFeatures

Các tính năng được tạo bao gồm

  • Độ lệch (giá trị của 1. 0)
  • Các giá trị được nâng lên lũy thừa cho mỗi độ (e. g. x^1, x^2, x^3,…)
  • Tương tác giữa tất cả các cặp tính năng (e. g. x1 * x2, x1 * x3,…)

Ví dụ với 2 biến đầu vào có giá trị 2 và 3 và bậc là 2 thì đặc trưng tạo ra sẽ là

  • 1 (sự thiên vị)
  • 2^1 = 2
  • 3^1 = 3
  • 2^2 = 4
  • 3^2 = 9
  • 2 * 3 = 6

Chúng ta có thể chứng minh điều này bằng một ví dụ

1

2

3

4

5

6

7

8

9

10

# thể hiện các loại tính năng được tạo

từ numpy nhập asarray

từ sklearn. tiền xử lý nhập Tính năng đa thức

# xác định tập dữ liệu

dữ liệu = sắp xếp([[2,3],[2,3],[2,3]])

in(dữ liệu)

# thực hiện biến đổi đặc trưng đa thức của tập dữ liệu

trans = Tính đa thức(bậc=2)

dữ liệu = chuyển. fit_transform(dữ liệu)

in(dữ liệu)

Chạy ví dụ đầu tiên báo cáo dữ liệu thô với hai tính năng (cột) và mỗi tính năng có cùng giá trị, 2 hoặc 3

Sau đó, các tính năng đa thức được tạo, dẫn đến sáu tính năng, phù hợp với những gì đã được mô tả ở trên

1

2

3

4

5

6

7

[[2 3]

[2 3]

[2 3]]

 

[[1. 2. 3. 4. 6. 9. ]

[1. 2. 3. 4. 6. 9. ]

[1. 2. 3. 4. 6. 9. ]]

Đối số "độ" kiểm soát số lượng tính năng được tạo và mặc định là 2

Đối số “interaction_only” có nghĩa là chỉ bao gồm các giá trị thô (độ 1) và tương tác (các cặp giá trị được nhân với nhau), mặc định là Sai

Đối số “include_bias” mặc định là True để bao gồm tính năng thiên vị

Chúng ta sẽ xem xét kỹ hơn cách sử dụng các phép biến đổi đặc trưng đa thức trên tập dữ liệu thực

Đầu tiên, hãy giới thiệu một bộ dữ liệu thực

Bộ dữ liệu sonar

Bộ dữ liệu sonar là bộ dữ liệu máy học tiêu chuẩn để phân loại nhị phân

Nó liên quan đến 60 đầu vào có giá trị thực và biến mục tiêu hai lớp. Có 208 ví dụ trong bộ dữ liệu và các lớp được cân bằng hợp lý

Thuật toán phân loại cơ sở có thể đạt được độ chính xác phân loại khoảng 53. 4 phần trăm sử dụng xác thực chéo 10 lần phân tầng lặp đi lặp lại. Hiệu suất cao nhất trên tập dữ liệu này là khoảng 88 phần trăm bằng cách sử dụng xác thực chéo 10 lần phân tầng lặp đi lặp lại

Bộ dữ liệu mô tả phản hồi của radar về đá hoặc mìn mô phỏng

Bạn có thể tìm hiểu thêm về tập dữ liệu từ đây

  • Bộ dữ liệu sonar
  • Bộ dữ liệu Sonar Mô tả

Không cần tải xuống tập dữ liệu;

Đầu tiên, hãy tải và tóm tắt tập dữ liệu. Ví dụ đầy đủ được liệt kê dưới đây

1

2

3

4

5

6

7

8

9

10

11

12

13

14

# tải và tóm tắt bộ dữ liệu sonar

từ gấu trúc nhập read_csv

từ gấu trúc. vẽ nhập scatter_matrix

từ matplotlib nhập pyplot

# Tải tập dữ liệu

url = "https. // thô. githubusercontent. com/jbrownlee/Bộ dữ liệu/master/sonar. csv"

tập dữ liệu = read_csv(url, header=None)

# tóm tắt hình dạng của tập dữ liệu

in(tập dữ liệu. hình dạng)

# tóm tắt từng biến

in(tập dữ liệu. mô tả())

# biểu đồ của các biến

tập dữ liệu. lịch sử()

pyplot. hiển thị()

Chạy ví dụ trước tiên sẽ tóm tắt hình dạng của tập dữ liệu đã tải

Điều này xác nhận 60 biến đầu vào, một biến đầu ra và 208 hàng dữ liệu

Một bản tóm tắt thống kê của các biến đầu vào được cung cấp cho thấy rằng các giá trị là số và nằm trong khoảng từ 0 đến 1

1

2

3

4

5

6

7

8

9

10

11

12

(208, 61)

0           1           2. 57           58           59

đếm 208. 000000  208. 000000  208. 000000. 208. 000000  208. 000000  208. 000000

có nghĩa là     0. 029164    0. 038437    0. 043832. 0. 007949    0. 007941    0. 006507

std      0. 022991    0. 032960    0. 038428. 0. 006470    0. 006181    0. 005031

tối thiểu      0. 001500    0. 000600    0. 001500. 0. 000300    0. 000100    0. 000600

25%      0. 013350    0. 016450    0. 018950. 0. 003600    0. 003675    0. 003100

50%      0. 022800    0. 030800    0. 034300. 0. 005800    0. 006400    0. 005300

75%      0. 035550    0. 047950    0. 057950. 0. 010350    0. 010325    0. 008525

tối đa      0. 137100    0. 233900    0. 305900. 0. 044000    0. 036400    0. 043900

 

[8 hàng x 60 cột]

Cuối cùng, một biểu đồ được tạo cho mỗi biến đầu vào

Nếu chúng ta bỏ qua sự lộn xộn của các biểu đồ và tập trung vào chính các biểu đồ, chúng ta có thể thấy rằng nhiều biến có phân phối sai lệch

Mở rộng đa thức trong Python

Sơ đồ biểu đồ của các biến đầu vào cho Bộ dữ liệu phân loại nhị phân Sonar

Tiếp theo, hãy điều chỉnh và đánh giá một mô hình máy học trên tập dữ liệu thô

Chúng tôi sẽ sử dụng thuật toán k-láng giềng gần nhất với siêu tham số mặc định và đánh giá nó bằng cách sử dụng xác thực chéo k-fold phân tầng lặp đi lặp lại. Ví dụ đầy đủ được liệt kê dưới đây

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

# đánh giá knn trên bộ dữ liệu sonar thô

từ numpy nhập nghĩa

từ numpy nhập std

từ gấu trúc nhập read_csv

từ sklearn. model_selection nhập cross_val_score

từ sklearn. model_selection nhập RepeatedStratifiedKFold

từ sklearn. hàng xóm nhập KNeighborsClassifier

từ sklearn. tiền xử lý nhập LabelEncoder

từ matplotlib nhập pyplot

# tải tập dữ liệu

url = "https. // thô. githubusercontent. com/jbrownlee/Bộ dữ liệu/master/sonar. csv"

tập dữ liệu = read_csv(url, header=None)

dữ liệu = tập dữ liệu. giá trị

# tách thành các cột đầu vào và đầu ra

X, y = dữ liệu[:, . -1], dữ liệu . [:, -1]

# đảm bảo đầu vào là số float và đầu ra là nhãn số nguyên

X = X. astype('float32')

y = Bộ mã hóa nhãn().fit_transform(y. astype('str'))

# xác định và cấu hình mô hình

model = KNeighborsClassifier()

# đánh giá mô hình

cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)

n_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')

# báo cáo hiệu suất mô hình

in('Độ chính xác. %. 3f (%. 3f)' % (nghĩa là(n_scores), std(n_scores)))

Chạy ví dụ đánh giá mô hình KNN trên bộ dữ liệu sonar thô

Ghi chú. Kết quả của bạn có thể thay đổi do tính chất ngẫu nhiên của thuật toán hoặc quy trình đánh giá hoặc sự khác biệt về độ chính xác của các con số. Cân nhắc chạy ví dụ một vài lần và so sánh kết quả trung bình

Chúng ta có thể thấy rằng mô hình đạt được độ chính xác phân loại trung bình khoảng 79. 7 phần trăm, cho thấy nó có kỹ năng (tốt hơn 53. 4 phần trăm) và đang có hiệu suất tốt (88 phần trăm)

1

Sự chính xác. 0. 797 (0. 073)

Tiếp theo, hãy khám phá một phép biến đổi đặc trưng đa thức của tập dữ liệu

Ví dụ biến đổi tính năng đa thức

Chúng ta có thể áp dụng trực tiếp các biến đổi tính năng đa thức cho bộ dữ liệu Sonar

Trong trường hợp này, chúng tôi sẽ sử dụng mức độ 3

1

2

3

4

.. .

# thực hiện biến đổi đặc trưng đa thức của tập dữ liệu

trans = Tính đa thức(bậc=3)

dữ liệu = chuyển. fit_transform(dữ liệu)

Hãy thử nó trên bộ dữ liệu sonar của chúng tôi

Dưới đây là ví dụ hoàn chỉnh về việc tạo biến đổi tính năng đa thức của bộ dữ liệu sonar và tóm tắt các tính năng đã tạo

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

# trực quan hóa một biến đổi tính năng đa thức của bộ dữ liệu sonar

từ gấu trúc nhập read_csv

từ gấu trúc nhập Khung dữ liệu

từ gấu trúc. vẽ nhập scatter_matrix

từ sklearn. tiền xử lý nhập Tính năng đa thức

từ matplotlib nhập pyplot

# tải tập dữ liệu

url = "https. // thô. githubusercontent. com/jbrownlee/Bộ dữ liệu/master/sonar. csv"

tập dữ liệu = read_csv(url, header=None)

# chỉ truy xuất các giá trị đầu vào số

dữ liệu = tập dữ liệu. giá trị[. , . -1]

# thực hiện biến đổi đặc trưng đa thức của tập dữ liệu

trans = Tính đa thức(bậc=3)

dữ liệu = chuyển. fit_transform(dữ liệu)

# chuyển đổi mảng trở lại khung dữ liệu

tập dữ liệu = Khung dữ liệu(dữ liệu)

# tóm tắt

in(tập dữ liệu. hình dạng)

Chạy ví dụ thực hiện chuyển đổi các tính năng đa thức trên tập dữ liệu sonar

Chúng tôi có thể thấy rằng các tính năng của chúng tôi đã tăng từ 61 (60 tính năng đầu vào) cho tập dữ liệu thô lên 39.711 tính năng (39.710 tính năng đầu vào)

1

(208, 39711)

Tiếp theo, hãy đánh giá mô hình KNN giống như phần trước, nhưng trong trường hợp này là trên phép biến đổi đặc trưng đa thức của tập dữ liệu

Ví dụ đầy đủ được liệt kê dưới đây

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

# đánh giá knn trên bộ dữ liệu sonar với biến đổi các tính năng đa thức

từ numpy nhập nghĩa

từ numpy nhập std

từ gấu trúc nhập read_csv

từ sklearn. model_selection nhập cross_val_score

từ sklearn. model_selection nhập RepeatedStratifiedKFold

từ sklearn. hàng xóm nhập KNeighborsClassifier

từ sklearn. tiền xử lý nhập LabelEncoder

từ sklearn. tiền xử lý nhập Tính năng đa thức

từ sklearn. đường dẫn nhập Đường dẫn

từ matplotlib nhập pyplot

# tải tập dữ liệu

url = "https. // thô. githubusercontent. com/jbrownlee/Bộ dữ liệu/master/sonar. csv"

tập dữ liệu = read_csv(url, header=None)

dữ liệu = tập dữ liệu. giá trị

# tách thành các cột đầu vào và đầu ra

X, y = dữ liệu[:, . -1], dữ liệu . [:, -1]

# đảm bảo đầu vào là số float và đầu ra là nhãn số nguyên

X = X. astype('float32')

y = Bộ mã hóa nhãn().fit_transform(y. astype('str'))

# xác định đường ống

trans = Tính đa thức(bậc=3)

model = KNeighborsClassifier()

quy trình = Quy trình(bước=[('t', trans), ('m', model)])

# đánh giá đường ống

cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)

n_scores = cross_val_score(đường dẫn, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')

# báo cáo hiệu suất đường ống

in('Độ chính xác. %. 3f (%. 3f)' % (nghĩa là(n_scores), std(n_scores)))

Ghi chú. Kết quả của bạn có thể thay đổi do tính chất ngẫu nhiên của thuật toán hoặc quy trình đánh giá hoặc sự khác biệt về độ chính xác của các con số. Cân nhắc chạy ví dụ một vài lần và so sánh kết quả trung bình

Chạy ví dụ này, chúng ta có thể thấy rằng việc biến đổi các đặc trưng đa thức dẫn đến hiệu suất tăng từ 79. Độ chính xác 7 phần trăm mà không cần biến đổi thành khoảng 80. 0 phần trăm với biến đổi

1

Sự chính xác. 0. 800 (0. 077)

Tiếp theo, hãy khám phá ảnh hưởng của các phạm vi tỷ lệ khác nhau

Hiệu của bậc đa thức

Bậc của đa thức làm tăng đáng kể số lượng các tính năng đầu vào

Để biết mức độ ảnh hưởng của điều này đến số lượng tính năng, chúng tôi có thể thực hiện chuyển đổi với nhiều mức độ khác nhau và so sánh số lượng tính năng trong tập dữ liệu

Ví dụ đầy đủ được liệt kê dưới đây

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

# so sánh ảnh hưởng của mức độ đối với số lượng tính năng được tạo

từ gấu trúc nhập read_csv

từ sklearn. tiền xử lý nhập LabelEncoder

từ sklearn. tiền xử lý nhập Tính năng đa thức

từ matplotlib nhập pyplot

 

# lấy tập dữ liệu

def get_dataset().

# tải tập dữ liệu

url = "https. // thô. githubusercontent. com/jbrownlee/Bộ dữ liệu/master/sonar. csv"

tập dữ liệu = read_csv(url, header=None)

dữ liệu = tập dữ liệu. giá trị

# tách thành các cột đầu vào và đầu ra

X, y = dữ liệu[:, . -1], dữ liệu . [:, -1]

# đảm bảo đầu vào là số float và đầu ra là nhãn số nguyên

X = X. astype('float32')

y = Bộ mã hóa nhãn().fit_transform(y. astype('str'))

trả về X, y

 

# xác định tập dữ liệu

X, y = get_dataset()

# tính toán thay đổi về số lượng tính năng

num_features = danh sách()

giảm = [i cho i in range(1, 6)]

cho d độ.

# tạo chuyển đổi

trans = Tính đa thức(bậc=d)

#phù hợp và biến đổi

dữ liệu = chuyển. fit_transform(X)

# kỷ lục số lượng tính năng

num_features. chắp thêm(dữ liệu. hình dạng[1])

# tóm tắt

in('Bằng. %d, Tính năng. %d' % (d, data.hình dạng[1]))

# mức độ cốt truyện so với số lượng tính năng

pyplot. đồ thị(độ suy giảm, num_features)

pyplot. hiển thị()

Chạy ví dụ đầu tiên báo cáo mức độ từ 1 đến 5 và số lượng tính năng trong tập dữ liệu

Chúng ta có thể thấy rằng mức độ 1 không có tác dụng và số lượng các tính năng tăng đáng kể từ 2 đến 5

Điều này nhấn mạnh rằng đối với bất kỳ thứ gì khác ngoài các tập dữ liệu rất nhỏ, nên sử dụng mức độ 2 hoặc 3 để tránh sự gia tăng đáng kể các biến đầu vào

1

2

3

4

5

Bằng cấp. 1, Tính năng. 61

Bằng cấp. 2, Tính năng. 1891

Bằng cấp. 3, Tính năng. 39711

Bằng cấp. 4, Tính năng. 635376

Bằng cấp. 5, Tính năng. 8259888

Mở rộng đa thức trong Python

Line Plot của Bằng vs. số lượng tính năng đầu vào cho biến đổi tính năng đa thức

Nhiều tính năng hơn có thể dẫn đến trang bị thừa nhiều hơn và do đó, kết quả tồi tệ hơn

Có thể là một ý kiến ​​hay khi coi bậc của các đặc trưng đa thức biến đổi dưới dạng siêu tham số và kiểm tra các giá trị khác nhau cho tập dữ liệu của bạn

Ví dụ dưới đây khám phá các giá trị độ từ 1 đến 4 và đánh giá tác động của chúng đối với độ chính xác của phân loại với mô hình đã chọn

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

# khám phá ảnh hưởng của độ đến độ chính xác đối với phép biến đổi đặc trưng đa thức

từ numpy nhập nghĩa

từ numpy nhập std

từ gấu trúc nhập read_csv

từ sklearn. model_selection nhập cross_val_score

từ sklearn. model_selection nhập RepeatedStratifiedKFold

từ sklearn. hàng xóm nhập KNeighborsClassifier

từ sklearn. tiền xử lý nhập Tính năng đa thức

từ sklearn. tiền xử lý nhập LabelEncoder

từ sklearn. đường dẫn nhập Đường dẫn

từ matplotlib nhập pyplot

 

# lấy tập dữ liệu

def get_dataset().

# tải tập dữ liệu

url = "https. // thô. githubusercontent. com/jbrownlee/Bộ dữ liệu/master/sonar. csv"

tập dữ liệu = read_csv(url, header=None)

dữ liệu = tập dữ liệu. giá trị

# tách thành các cột đầu vào và đầu ra

X, y = dữ liệu[:, . -1], dữ liệu . [:, -1]

# đảm bảo đầu vào là số float và đầu ra là nhãn số nguyên

X = X. astype('float32')

y = Bộ mã hóa nhãn().fit_transform(y. astype('str'))

trả về X, y

 

# lấy danh sách các mô hình để đánh giá

def get_models().

mô hình = dict()

cho d trong phạm vi(1,5):

# xác định đường ống

trans = Tính đa thức(bậc=d)

model = KNeighborsClassifier()

mô hình[str(d)] = Pipeline(steps=[('t', trans), ('m', model)])

trả về mô hình

 

# đánh giá một mô hình đưa ra bằng xác thực chéo

def evaluate_model(model, X, y):

cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)

điểm = cross_val_score(mô hình, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')

trả về điểm

 

# xác định tập dữ liệu

X, y = get_dataset()

# lấy các mô hình để đánh giá

models = get_models()

# đánh giá các mô hình và lưu trữ kết quả

kết quả, tên = danh sách(), list()

cho tên, mô hình trong models.mặt hàng().

điểm = evaluate_model(model, X, y)

kết quả. nối(điểm)

tên. chắp thêm(tên)

in('>%s %. 3f (%. 3f)' % (tên, mean(scores), std(scores)))

# hiệu suất mô hình cốt truyện để so sánh

pyplot. boxplot(kết quả, nhãn=names, showmeans=True)

pyplot. hiển thị()

Chạy ví dụ báo cáo độ chính xác phân loại trung bình cho từng mức độ đa thức

Ghi chú. Kết quả của bạn có thể thay đổi do tính chất ngẫu nhiên của thuật toán hoặc quy trình đánh giá hoặc sự khác biệt về độ chính xác của các con số. Cân nhắc chạy ví dụ một vài lần và so sánh kết quả trung bình

Trong trường hợp này, chúng ta có thể thấy rằng hiệu suất nói chung kém hơn là không có biến đổi (độ 1) ngoại trừ độ 3

Có thể thú vị khi khám phá việc mở rộng dữ liệu trước hoặc sau khi thực hiện chuyển đổi để xem nó ảnh hưởng như thế nào đến hiệu suất của mô hình

1

2

3

4

>1 0. 797 (0. 073)

>2 0. 793 (0. 085)

>3 0. 800 (0. 077)

>4 0. 795 (0. 079)

Biểu đồ hộp và râu ria được tạo để tóm tắt điểm chính xác phân loại cho từng bậc đa thức

Chúng ta có thể thấy rằng hiệu suất vẫn không thay đổi, có lẽ với những dấu hiệu đầu tiên của việc trang bị quá mức với mức độ 4

Mở rộng đa thức trong Python

Ô đồ thị bậc cho phép biến đổi đặc trưng đa thức so với. Phân loại Độ chính xác của KNN trên Bộ dữ liệu Sonar

Đọc thêm

Phần này cung cấp nhiều tài nguyên hơn về chủ đề này nếu bạn muốn tìm hiểu sâu hơn

Sách

  • Giới thiệu về học tập thống kê với các ứng dụng trong R, 2014
  • Lựa chọn và kỹ thuật tính năng, 2019

API

  • sklearning. sơ chế. API tính năng đa thức

Bài viết

  • Đa thức, Wikipedia
  • Hồi quy đa thức, Wikipedia

Tóm lược

Trong hướng dẫn này, bạn đã khám phá cách sử dụng các phép biến đổi đặc trưng đa thức cho kỹ thuật đặc trưng với các biến đầu vào số

Tính năng đa thức trong Python là gì?

Các tính năng đa thức tạo một ma trận mới với tất cả các tổ hợp đa thức của các tính năng có bậc nhất định . Giống như [a] sẽ được chuyển đổi thành [1,a,a^2] cho độ 2. Bạn có thể hình dung đầu vào được chuyển thành ma trận do PolynomialFeatures tạo ra.

Mở rộng tính năng đa thức là gì?

Các đặc trưng đa thức là những đặc trưng được tạo bằng cách nâng các đặc trưng hiện có lên một cấp số nhân . Ví dụ: nếu tập dữ liệu có một đối tượng đầu vào X, thì đối tượng đa thức sẽ là phần bổ sung của đối tượng mới (cột) trong đó các giá trị được tính bằng cách bình phương các giá trị trong X, e. g. X^2.

Python có thể giải phương trình đa thức không?

Bài viết sau đây chứa các chương trình để tính toán một phương trình đa thức với điều kiện là các hệ số của đa thức được lưu trữ trong Danh sách. Chúng ta sẽ được cung cấp giá trị của biến và chúng ta phải tính giá trị của đa thức tại điểm đó