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 Show
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ệnChú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} 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
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 Cách sử dụng biến đổi tính năng đa thức cho máy học Hướng dẫn tổng quanHướng dẫn này được chia thành năm phần;
Tính năng đa thứcCá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
— 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
— 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
— 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ứcBiế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
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à
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 sonarBộ 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
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 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ứcChú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ứcBậ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 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 Ô đồ 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êmPhầ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
API
Bài viết
Tóm lượcTrong 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 đó |