LinearRegression
khớp mô hình tuyến tính với dữ liệu. Trong trường hợp các giá trị X
một chiều như bạn có ở trên, kết quả là một đường thẳng [i. e. y = a + b*x
]. Trong trường hợp giá trị hai chiều, kết quả là một mặt phẳng [i. e. z = a + b*x + c*y
]. Vì vậy, bạn không thể mong đợi một mô hình hồi quy tuyến tính hoàn toàn phù hợp với một đường cong bậc hai. nó chỉ đơn giản là không có đủ độ phức tạp của mô hình để làm điều đó
Điều đó nói rằng, bạn có thể khéo léo chuyển đổi dữ liệu đầu vào của mình để phù hợp với đường cong bậc hai với mô hình hồi quy tuyến tính. Xét trường hợp 2D ở trên
z = a + b*x + c*y
Bây giờ hãy thay thế y = x^2
. Nghĩa là, chúng tôi thêm một thứ nguyên thứ hai vào dữ liệu của chúng tôi có chứa số hạng bậc hai. Bây giờ chúng ta có một mô hình tuyến tính khác
z = a + b*x + c*x^2
Kết quả là một mô hình bậc hai trong x
, nhưng vẫn tuyến tính trong các hệ số. Đó là, chúng ta có thể giải quyết nó một cách dễ dàng thông qua hồi quy tuyến tính. đây là một ví dụ về mở rộng chức năng cơ bản của dữ liệu đầu vào. Đây là mã
import numpy as np
from sklearn.linear_model import LinearRegression
x = np.arange[10][:, None]
y = np.ravel[x] ** 2
p = np.array[[1, 2]]
model = LinearRegression[].fit[x ** p, y]
model.predict[11 ** p]
# [121]
Tuy nhiên, điều này hơi khó xử vì mô hình yêu cầu đầu vào 2D thành
z = a + b*x + c*x^2
0, vì vậy bạn phải chuyển đổi đầu vào theo cách thủ công. Nếu bạn muốn quá trình chuyển đổi này diễn ra tự động, bạn có thể sử dụng e. g. z = a + b*x + c*x^2
1 trong một đường ống dẫnfrom sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
model = make_pipeline[PolynomialFeatures[2], LinearRegression[]]
model.fit[x, y].predict[11]
# [121]
Đây là một trong những điều tuyệt vời về mô hình tuyến tính. sử dụng mở rộng chức năng cơ bản như thế này, chúng có thể rất linh hoạt, trong khi vẫn rất nhanh. Bạn có thể nghĩ đến việc thêm các cột bằng bậc ba, bậc bốn hoặc các thuật ngữ khác và đó vẫn là hồi quy tuyến tính. Hoặc đối với các mô hình định kỳ, bạn có thể nghĩ đến việc thêm các cột sin, cosin, v.v. Trong giới hạn tối đa của điều này, cái gọi là "thủ thuật hạt nhân" cho phép bạn thêm vô số cột mới vào dữ liệu của mình một cách hiệu quả và kết thúc với một mô hình rất mạnh mẽ – nhưng vẫn tuyến tính và do đó vẫn tương đối nhanh. Để biết ví dụ về loại công cụ ước tính này, hãy xem scikit-learn's
z = a + b*x + c*x^2
2 Nếu bạn muốn khớp một đường cong với dữ liệu của mình bằng scikit-learning bằng cách sử dụng hồi quy đa thức, bạn đang ở đúng nơi. Nhưng trước tiên, hãy đảm bảo rằng bạn đã quen thuộc với hồi quy tuyến tính. Tôi cũng sẽ giả sử trong bài viết này rằng bạn đã cài đặt matplotlib, pandas và numpy. Bây giờ, hãy bắt tay vào mã hóa mô hình hồi quy đa thức đầu tiên của bạn
Nếu bạn không có môi trường Python của riêng mình cho khoa học dữ liệu, hãy sử dụng một trong các tùy chọn này để có được một môi trường
- Nhận máy chủ dữ liệu của riêng bạn và cài đặt các thư viện khoa học dữ liệu phổ biến nhất
- Cài đặt Anaconda trên máy tính cục bộ của bạn
Hồi quy đa thức tốt cho cái gì?
Tin xấu. bạn không thể chỉ hồi quy tuyến tính theo cách của mình thông qua mọi tập dữ liệu. 😔
Thông thường, bạn sẽ gặp dữ liệu trong đó mối quan hệ giữa [các] tính năng và biến phản hồi không thể được mô tả tốt nhất bằng một đường thẳng
giống như ở đây
Thấy vấn đề?
Nếu bạn nghĩ rằng bằng cách nào đó, đường này nên được uốn cong để phù hợp hơn với dữ liệu, thì bạn sẽ hiểu bằng trực giác lý do tại sao chúng tôi sử dụng hồi quy đa thức. nó cung cấp cho chúng tôi độ cong mà chúng tôi cần để chúng tôi có thể có những dự đoán chính xác hơn dựa trên dữ liệu của mình
Nhưng chúng ta hãy giữ ngựa của chúng ta. 🐴
Tại sao gọi là “đa thức”?
Đó là những gì chúng ta sẽ khám phá trong phần tiếp theo
một đa thức là gì?
Hãy phá vỡ nó
- "poly" có nghĩa là "nhiều",
- "danh nghĩa" có nghĩa là "điều khoản" [đối với "bộ phận" hoặc "tên"]
Đây là một ví dụ về đa thức
4x + 7
x = np.arange[0, 30]1 là một biểu thức toán học đơn giản bao gồm hai số hạng.
y = [3, 4, 5, 7, 10, 8, 9, 10, 10, 23, 27, 44, 50, 63, 67, 60, 62, 70, 75, 88, 81, 87, 95, 100, 108, 135, 151, 160, 169, 179]
plt.figure[figsize=[10,6]]
plt.scatter[x, y]
plt.show[]
x = np.arange[0, 30]2 [học kỳ đầu tiên] và
y = [3, 4, 5, 7, 10, 8, 9, 10, 10, 23, 27, 44, 50, 63, 67, 60, 62, 70, 75, 88, 81, 87, 95, 100, 108, 135, 151, 160, 169, 179]
plt.figure[figsize=[10,6]]
plt.scatter[x, y]
plt.show[]
x = np.arange[0, 30]3 [học kỳ thứ hai]. Trong đại số, các số hạng được phân tách bằng các toán tử logic
y = [3, 4, 5, 7, 10, 8, 9, 10, 10, 23, 27, 44, 50, 63, 67, 60, 62, 70, 75, 88, 81, 87, 95, 100, 108, 135, 151, 160, 169, 179]
plt.figure[figsize=[10,6]]
plt.scatter[x, y]
plt.show[]
x = np.arange[0, 30]4 hoặc
y = [3, 4, 5, 7, 10, 8, 9, 10, 10, 23, 27, 44, 50, 63, 67, 60, 62, 70, 75, 88, 81, 87, 95, 100, 108, 135, 151, 160, 169, 179]
plt.figure[figsize=[10,6]]
plt.scatter[x, y]
plt.show[]
x = np.arange[0, 30]5, vì vậy bạn có thể dễ dàng đếm xem một biểu thức có bao nhiêu số hạng
y = [3, 4, 5, 7, 10, 8, 9, 10, 10, 23, 27, 44, 50, 63, 67, 60, 62, 70, 75, 88, 81, 87, 95, 100, 108, 135, 151, 160, 169, 179]
plt.figure[figsize=[10,6]]
plt.scatter[x, y]
plt.show[]
x = np.arange[0, 30]6 cũng là một đa thức [gồm 3 hạng tử]. Và để làm bạn bối rối một chút,
y = [3, 4, 5, 7, 10, 8, 9, 10, 10, 23, 27, 44, 50, 63, 67, 60, 62, 70, 75, 88, 81, 87, 95, 100, 108, 135, 151, 160, 169, 179]
plt.figure[figsize=[10,6]]
plt.scatter[x, y]
plt.show[]
x = np.arange[0, 30]7 cũng là một đa thức, mặc dù nó không có “nhiều số hạng” [
y = [3, 4, 5, 7, 10, 8, 9, 10, 10, 23, 27, 44, 50, 63, 67, 60, 62, 70, 75, 88, 81, 87, 95, 100, 108, 135, 151, 160, 169, 179]
plt.figure[figsize=[10,6]]
plt.scatter[x, y]
plt.show[]
x = np.arange[0, 30]7 được gọi là một đơn thức, bởi vì nó bao gồm một số hạng – nhưng đừng quá lo lắng về nó, tôi chỉ muốn
y = [3, 4, 5, 7, 10, 8, 9, 10, 10, 23, 27, 44, 50, 63, 67, 60, 62, 70, 75, 88, 81, 87, 95, 100, 108, 135, 151, 160, 169, 179]
plt.figure[figsize=[10,6]]
plt.scatter[x, y]
plt.show[]
Hiện tại, hãy gắn bó với
x = np.arange[0, 30]1. Tôi vẽ nó cho bạn
y = [3, 4, 5, 7, 10, 8, 9, 10, 10, 23, 27, 44, 50, 63, 67, 60, 62, 70, 75, 88, 81, 87, 95, 100, 108, 135, 151, 160, 169, 179]
plt.figure[figsize=[10,6]]
plt.scatter[x, y]
plt.show[]
Bây giờ tôi muốn bạn xem kỹ cốt truyện - bạn thấy gì? . 😮
Hãy tóm tắt lại những gì vừa xảy ra
- chúng tôi đã lấy một đa thức [
x = np.arange[0, 30]
1],
y = [3, 4, 5, 7, 10, 8, 9, 10, 10, 23, 27, 44, 50, 63, 67, 60, 62, 70, 75, 88, 81, 87, 95, 100, 108, 135, 151, 160, 169, 179]
plt.figure[figsize=[10,6]]
plt.scatter[x, y]
plt.show[] - âm mưu nó,
- và có một đường thẳng [nhớ. một mô hình hồi quy tuyến tính cung cấp cho bạn một đường thẳng]
Chuyện gì đang xảy ra…?
Bạn thấy đấy, công thức xác định một đường thẳng trong mô hình hồi quy tuyến tính thực chất là một đa thức và nó có tên riêng. đa thức tuyến tính [bất cứ thứ gì có dạng
from sklearn.preprocessing import PolynomialFeatures1 đều là đa thức tuyến tính]
Đẹp. Chúng ta có thể bắt đầu viết mã chưa?
Thực ra… không
Từ vựng liên quan đến hồi quy đa thức
Trước khi chúng ta đến phần thực hành, có một số điều nữa bạn cần biết
Chúng tôi sẽ sử dụng 3x4 – 7x3 + 2x2 + 11 để cải thiện vốn từ vựng liên quan đến đa thức của bạn với một số định nghĩa cần thiết
- bậc của đa thức. lũy thừa cao nhất [số mũ lớn nhất] trong đa thức của bạn;
- hệ số. mỗi số [3, 7, 2, 11] trong đa thức của chúng ta là một hệ số;
- thuật ngữ hàng đầu. thuật ngữ có quyền hạn cao nhất [trong trường hợp của chúng tôi là
from sklearn.preprocessing import PolynomialFeatures
3]; - hệ số hàng đầu. hệ số của số hạng đứng đầu [nó là 3 trong đa thức của chúng ta],
- tình trạng ổn định. chặn y, nó không bao giờ thay đổi. cho dù giá trị của x là bao nhiêu thì hằng số vẫn giữ nguyên
hồi quy đa thức. định nghĩa chính thức
Bây giờ bạn đã nói đúng biệt ngữ đa thức, tôi muốn cung cấp cho bạn một định nghĩa chính thức. Một biểu thức là một đa thức nếu
- biểu thức có số hạng hữu hạn
- và mỗi thuật ngữ có một hệ số,
- và các hệ số này được nhân với một biến [trong trường hợp của chúng ta là x],
- và các biến được nâng lên thành lũy thừa nguyên không âm
Nếu bạn đã chú ý, bạn có thể tự hỏi. làm thế nào
x = np.arange[0, 30]1 là một đa thức khi số hạng thứ hai [
y = [3, 4, 5, 7, 10, 8, 9, 10, 10, 23, 27, 44, 50, 63, 67, 60, 62, 70, 75, 88, 81, 87, 95, 100, 108, 135, 151, 160, 169, 179]
plt.figure[figsize=[10,6]]
plt.scatter[x, y]
plt.show[]
x = np.arange[0, 30]3] rõ ràng thiếu biến
y = [3, 4, 5, 7, 10, 8, 9, 10, 10, 23, 27, 44, 50, 63, 67, 60, 62, 70, 75, 88, 81, 87, 95, 100, 108, 135, 151, 160, 169, 179]
plt.figure[figsize=[10,6]]
plt.scatter[x, y]
plt.show[]
from sklearn.preprocessing import PolynomialFeatures6?
Trên thực tế,
from sklearn.preprocessing import PolynomialFeatures6 có ở dạng
from sklearn.preprocessing import PolynomialFeatures8. Vì
from sklearn.preprocessing import PolynomialFeatures9 bằng với
poly = PolynomialFeatures[degree=2, include_bias=False]0, và
poly = PolynomialFeatures[degree=2, include_bias=False]1 bằng với
x = np.arange[0, 30]3, nên thực sự không cần viết
y = [3, 4, 5, 7, 10, 8, 9, 10, 10, 23, 27, 44, 50, 63, 67, 60, 62, 70, 75, 88, 81, 87, 95, 100, 108, 135, 151, 160, 169, 179]
plt.figure[figsize=[10,6]]
plt.scatter[x, y]
plt.show[]
from sklearn.preprocessing import PolynomialFeatures9
Tháng đầu tiên của nhà khoa học dữ liệu cơ sở
Một khóa học trực tuyến thực tế 100%. Mô phỏng 6 tuần để trở thành nhà khoa học dữ liệu cấp dưới tại một công ty khởi nghiệp thực tế
“Giải quyết các vấn đề thực tế, có được trải nghiệm thực tế - giống như trong một công việc khoa học dữ liệu thực sự. ”
Tìm hiểu thêm
Sự khác biệt giữa hồi quy tuyến tính và đa thức
Hãy quay trở lại
poly = PolynomialFeatures[degree=2, include_bias=False]4. nếu ta viết các hạng tử của đa thức từ hạng tử bậc cao nhất đến hạng tử bậc thấp nhất thì nó được gọi là dạng chuẩn của đa thức
Trong bối cảnh học máy, bạn sẽ thường thấy nó bị đảo ngược
poly = PolynomialFeatures[degree=2, include_bias=False]5
poly = PolynomialFeatures[degree=2, include_bias=False]
6 là biến phản hồi mà chúng tôi muốn dự đoán,from sklearn.preprocessing import PolynomialFeatures
6 là tính năng,poly = PolynomialFeatures[degree=2, include_bias=False]
8 là đánh chặn củapoly = PolynomialFeatures[degree=2, include_bias=False]
6,- các
poly_features = poly.fit_transform[x.reshape[-1, 1]]
0 khác là các hệ số/tham số chúng tôi muốn tìm khi chúng tôi đào tạo mô hình của mình trên các giá trịfrom sklearn.preprocessing import PolynomialFeatures
6 vàpoly = PolynomialFeatures[degree=2, include_bias=False]
6 có sẵn, poly_features = poly.fit_transform[x.reshape[-1, 1]]
3 là bậc của đa thức [_______37_______3 càng cao, bạn có thể tạo các đường cong phức tạp hơn]
Công thức hồi quy đa thức ở trên rất giống với công thức hồi quy tuyến tính bội
poly_features = poly.fit_transform[x.reshape[-1, 1]]5
Đó không phải là một sự trùng hợp ngẫu nhiên. hồi quy đa thức là một mô hình tuyến tính được sử dụng để mô tả các mối quan hệ phi tuyến tính
Sao có thể như thế được?
Ví dụ: nếu chúng tôi có tính năng
from sklearn.preprocessing import PolynomialFeatures6 và chúng tôi sẽ sử dụng đa thức bậc 3, thì công thức của chúng tôi cũng sẽ bao gồm
poly_features = poly.fit_transform[x.reshape[-1, 1]]7 và
poly_features = poly.fit_transform[x.reshape[-1, 1]]8. Và đây là thứ mang lại độ cong cho một đường
Những gì tôi đang cố gắng rèn về nhà là đây. hồi quy tuyến tính chỉ là một đa thức cấp một. Hồi quy đa thức sử dụng đa thức bậc cao hơn. Cả hai đều là mô hình tuyến tính, nhưng kết quả đầu tiên là một đường thẳng, kết quả thứ hai cho bạn một đường cong. Đó là nó
Bây giờ bạn đã sẵn sàng viết mã cho mô hình hồi quy đa thức đầu tiên của mình
Mã hóa mô hình hồi quy đa thức với scikit-learning
Đối với người mới bắt đầu, hãy tưởng tượng rằng bạn được trình bày với biểu đồ phân tán bên dưới
Đây là cách bạn có thể tạo lại cùng một biểu đồ
import numpy as np import pandas as pd import matplotlib.pyplot as plt
x = np.arange[0, 30]
y = [3, 4, 5, 7, 10, 8, 9, 10, 10, 23, 27, 44, 50, 63, 67, 60, 62, 70, 75, 88, 81, 87, 95, 100, 108, 135, 151, 160, 169, 179]
plt.figure[figsize=[10,6]]
plt.scatter[x, y]
plt.show[]
Nó không có gì đặc biệt, thực sự. chỉ một tính năng [
from sklearn.preprocessing import PolynomialFeatures6] và các câu trả lời [
poly = PolynomialFeatures[degree=2, include_bias=False]6]
Bây giờ, giả sử rằng bạn có linh cảm rằng mối quan hệ giữa các tính năng và phản hồi là phi tuyến tính và bạn muốn khớp một đường cong với dữ liệu
Vì chúng tôi chỉ có một tính năng, nên áp dụng công thức hồi quy đa thức sau
poly = PolynomialFeatures[degree=2, include_bias=False]5
Trong phương trình này, số lượng hệ số [
poly_features = poly.fit_transform[x.reshape[-1, 1]]0s] được xác định bởi lũy thừa cao nhất của đối tượng địa lý [còn gọi là bậc của đa thức; không xét đến
poly = PolynomialFeatures[degree=2, include_bias=False]8, vì đó là giao điểm]
Hai câu hỏi ngay lập tức nảy sinh
- Làm cách nào để thiết lập bậc của đa thức [và do đó là số lượng ß]?
- Làm cách nào để chúng tôi tạo x2, x3 hoặc xn khi ban đầu chúng tôi có x là tính năng duy nhất của chúng tôi?
May mắn thay, có câu trả lời cho cả hai câu hỏi
trả lời 1. có nhiều phương pháp để xác định bậc của đa thức mang lại kết quả tốt nhất, nhưng sẽ nói thêm về điều này sau. Hiện tại, chúng ta hãy giả định rằng tập dữ liệu của chúng ta có thể được mô tả bằng đa thức bậc 2
trả lời 2. chúng tôi có thể tạo các tính năng mới [x được nâng lên để tăng sức mạnh] sau khi bạn đã cài đặt sci-kit learn
BƯỚC 1. Xác định bậc của đa thức
Trước tiên, hãy nhập
poly_features = poly.fit_transform[x.reshape[-1, 1]]4
from sklearn.preprocessing import PolynomialFeatures
Sau đó, lưu phiên bản của
poly_features = poly.fit_transform[x.reshape[-1, 1]]4 với các cài đặt sau
poly = PolynomialFeatures[degree=2, include_bias=False]
poly_features = poly.fit_transform[x.reshape[-1, 1]]6 đặt bậc của hàm đa thức của chúng ta.
poly_features = poly.fit_transform[x.reshape[-1, 1]]7 có nghĩa là chúng ta muốn làm việc với đa thức bậc 2
poly_features = poly.fit_transform[x.reshape[-1, 1]]8
poly_features = poly.fit_transform[x.reshape[-1, 1]]9 nên được đặt thành
from sklearn.linear_model import LinearRegression0, vì chúng ta sẽ sử dụng
poly_features = poly.fit_transform[x.reshape[-1, 1]]4 cùng với
from sklearn.linear_model import LinearRegression2 sau này
Mẩu chuyện dài.
from sklearn.linear_model import LinearRegression2 sẽ xử lý cài đặt này theo mặc định, vì vậy không cần đặt
from sklearn.linear_model import LinearRegression4 thành
from sklearn.linear_model import LinearRegression5. Nếu nó không được quan tâm, thì
poly_features = poly.fit_transform[x.reshape[-1, 1]]9 có nghĩa là chúng tôi cố tình muốn phần chặn của y [
poly = PolynomialFeatures[degree=2, include_bias=False]8] bằng với
from sklearn.linear_model import LinearRegression8 – nhưng chúng tôi không muốn điều đó. Đây là một lời giải thích tuyệt vời về tất cả những điều này
Nếu bạn in
from sklearn.linear_model import LinearRegression9, bạn sẽ thấy rằng cho đến giờ chúng ta mới tạo một phiên bản của
poly_features = poly.fit_transform[x.reshape[-1, 1]]4, và đó là tất cả những gì cần làm
Bước tiếp theo
BƯỚC 2. Tạo các tính năng mới
poly_features = poly.fit_transform[x.reshape[-1, 1]]
poly_reg_model = LinearRegression[]1 biến mảng numpy của chúng ta
from sklearn.preprocessing import PolynomialFeatures6 từ mảng 1D thành mảng 2D – điều này là bắt buộc, nếu không chúng ta sẽ gặp lỗi sau
Chỉ có một phương pháp –
poly_reg_model = LinearRegression[]3 – nhưng trên thực tế, đó là sự kết hợp của hai phương pháp riêng biệt.
poly_reg_model = LinearRegression[]4 và
poly_reg_model = LinearRegression[]5.
poly_reg_model = LinearRegression[]3 là cách viết tắt để sử dụng cả hai cùng một lúc, vì chúng thường được sử dụng cùng nhau
Vì tôi muốn bạn hiểu những gì đang xảy ra bí mật, tôi sẽ chỉ cho bạn xem chúng một cách riêng biệt
Với
poly_reg_model = LinearRegression[]4, về cơ bản, chúng tôi chỉ khai báo tính năng nào chúng tôi muốn chuyển đổi
poly_reg_model = LinearRegression[]5 thực hiện chuyển đổi thực tế
Những con số này là gì? . Trong cột đầu tiên, chúng tôi có các giá trị của mình cho
from sklearn.preprocessing import PolynomialFeatures6 [e. g.
poly_reg_model.fit[poly_features, y]2]. Trong cột thứ hai, chúng tôi có các giá trị của chúng tôi cho
from sklearn.preprocessing import PolynomialFeatures6 bình phương [e. g.
poly_reg_model.fit[poly_features, y]4]
Trông quen quen?
poly_features = poly.fit_transform[x.reshape[-1, 1]]8
Chúng tôi muốn tạo các giá trị x2 từ các giá trị x của chúng tôi và
poly_reg_model = LinearRegression[]3 đã làm được điều đó. Chúng tôi lưu kết quả vào
poly_reg_model.fit[poly_features, y]7
poly_features = poly.fit_transform[x.reshape[-1, 1]]
BƯỚC 3. Tạo mô hình hồi quy đa thức
Bây giờ là lúc để tạo mô hình học máy của chúng tôi. Tất nhiên, chúng ta cần nhập nó trước
from sklearn.linear_model import LinearRegression
Giữ một phút. 😮 Không phải hướng dẫn này là về hồi quy đa thức sao?
Chỉ cần nghĩ lại những gì bạn đã đọc cách đây không lâu. hồi quy đa thức là một mô hình tuyến tính, đó là lý do tại sao chúng tôi nhập
poly_reg_model.fit[poly_features, y]8. 🙂
Hãy lưu một thể hiện của
poly_reg_model.fit[poly_features, y]8 vào một biến
poly_reg_model = LinearRegression[]
Đây là mã trong cuộc sống thực
Sau đó, chúng tôi khớp mô hình của mình với dữ liệu của mình
poly_reg_model.fit[poly_features, y]
Phù hợp có nghĩa là chúng tôi đào tạo mô hình của mình bằng cách cho nó biết giá trị của tính năng [
poly_reg_model.fit[poly_features, y]7] và phản hồi [
poly = PolynomialFeatures[degree=2, include_bias=False]6] là gì. Khi điều chỉnh/huấn luyện mô hình của chúng tôi, về cơ bản, chúng tôi hướng dẫn nó giải các hệ số [được đánh dấu bằng chữ in đậm] trong hàm đa thức của chúng tôi
import numpy as np import pandas as pd import matplotlib.pyplot as plt03
Sau khi chạy mã, bạn có thể nghĩ rằng không có gì xảy ra, nhưng tin tôi đi, mô hình đã ước tính các hệ số [quan trọng. bạn không cần phải lưu nó vào một biến để nó hoạt động. ]
Bây giờ mô hình của chúng ta đã được đào tạo đúng cách, chúng ta có thể đưa nó vào hoạt động bằng cách hướng dẫn nó dự đoán các câu trả lời [
import numpy as np import pandas as pd import matplotlib.pyplot as plt04] dựa trên
poly_reg_model.fit[poly_features, y]7 và các hệ số mà nó đã ước tính
import numpy as np import pandas as pd import matplotlib.pyplot as plt0
Tại đây bạn có thể xem các câu trả lời được dự đoán
Hãy làm một số dataviz để xem mô hình của chúng ta trông như thế nào
Tôi nghĩ tiêu đề của cốt truyện đã nói lên tất cả, nhưng tôi muốn nhắc lại. xin chúc mừng, bạn đã tạo mô hình hồi quy đa thức đầu tiên của mình. 👏
Trong khi bạn đang ăn mừng, tôi sẽ dán mã vào đây phòng trường hợp bạn cần
import numpy as np import pandas as pd import matplotlib.pyplot as plt1
Tháng đầu tiên của nhà khoa học dữ liệu cơ sở
Một khóa học trực tuyến thực tế 100%. Mô phỏng 6 tuần để trở thành nhà khoa học dữ liệu cấp dưới tại một công ty khởi nghiệp thực tế
“Giải quyết các vấn đề thực tế, có được trải nghiệm thực tế - giống như trong một công việc khoa học dữ liệu thực sự. ”
Tìm hiểu thêm
Mã hóa mô hình hồi quy đa thức với nhiều tính năng
Thông thường, bạn sẽ phải làm việc với dữ liệu bao gồm nhiều hơn một tính năng [tôi biết cuộc sống rất phức tạp]. Hãy mô phỏng một tình huống như vậy
import numpy as np import pandas as pd import matplotlib.pyplot as plt
import numpy as np import pandas as pd import matplotlib.pyplot as plt3
Cần có
import numpy as np import pandas as pd import matplotlib.pyplot as plt06 để bạn và tôi có thể làm việc với cùng một dữ liệu “ngẫu nhiên”. [Đọc bài viết này nếu bạn muốn hiểu làm thế nào nó có thể. ] Chúng tôi tạo một số dữ liệu ngẫu nhiên với một số tiếng ồn được thêm vào.
import numpy as np import pandas as pd import matplotlib.pyplot as plt07 chứa 100 giá trị cho tính năng đầu tiên của chúng tôi,
import numpy as np import pandas as pd import matplotlib.pyplot as plt08 chứa 100 giá trị cho tính năng thứ hai của chúng tôi. Câu trả lời của chúng tôi [100] được lưu vào
poly = PolynomialFeatures[degree=2, include_bias=False]6, như mọi khi
Hãy vẽ biểu đồ của cả hai tính năng, chỉ để có được sự hiểu biết trực quan về mối quan hệ giữa các tính năng và phản hồi
Để thuận tiện cho bạn, đây là mã
import numpy as np import pandas as pd import matplotlib.pyplot as plt4
BƯỚC 1. Lưu trữ các biến trong một khung dữ liệu
Sau đó, chúng tôi tạo một khung dữ liệu gấu trúc nơi chúng tôi sẽ lưu trữ các tính năng và phản hồi của mình
import numpy as np import pandas as pd import matplotlib.pyplot as plt5
Đây là khung dữ liệu kết quả
Một lần nữa, cần có
import numpy as np import pandas as pd import matplotlib.pyplot as plt10 [
import numpy as np import pandas as pd import matplotlib.pyplot as plt11 vì chúng tôi có 100 hàng], nếu không, chúng tôi sẽ nhận được lỗi sau
BƯỚC 2. Xác định dữ liệu huấn luyện và kiểm tra
Bây giờ chúng ta chuyển sang scikit-learning một lần nữa
import numpy as np import pandas as pd import matplotlib.pyplot as plt6
import numpy as np import pandas as pd import matplotlib.pyplot as plt12 giúp chúng tôi chia dữ liệu của mình thành tập dữ liệu thử nghiệm và đào tạo
import numpy as np import pandas as pd import matplotlib.pyplot as plt7
Đây là một lời giải thích từng bước
import numpy as np import pandas as pd import matplotlib.pyplot as plt
13. Từimport numpy as np import pandas as pd import matplotlib.pyplot as plt
14, chúng tôi lưu các cộtimport numpy as np import pandas as pd import matplotlib.pyplot as plt
07 vàimport numpy as np import pandas as pd import matplotlib.pyplot as plt
08 thànhimport numpy as np import pandas as pd import matplotlib.pyplot as plt
17, cộtpoly = PolynomialFeatures[degree=2, include_bias=False]
6 thànhpoly = PolynomialFeatures[degree=2, include_bias=False]
6. Tại thời điểm này, chúng tôi có các tính năng và phản hồi được lưu trữ trong các biến riêng biệtimport numpy as np import pandas as pd import matplotlib.pyplot as plt
20 vàimport numpy as np import pandas as pd import matplotlib.pyplot as plt
21. giống như trước đây, chúng tôi tạo các tính năng đa thức mớiimport numpy as np import pandas as pd import matplotlib.pyplot as plt
22. Trong phương thức train_test_split, chúng tôi xác định tất cả các tính năng của chúng tôi [poly_reg_model.fit[poly_features, y]
7] và tất cả các phản hồi của chúng tôi [poly = PolynomialFeatures[degree=2, include_bias=False]
6]. Sau đó, vớiimport numpy as np import pandas as pd import matplotlib.pyplot as plt
25, chúng tôi đặt tỷ lệ phần trăm của tất cả các tính năng [poly_reg_model.fit[poly_features, y]
7] và phản hồi [poly = PolynomialFeatures[degree=2, include_bias=False]
6] mà chúng tôi muốn phân bổ để kiểm tra khả năng dự đoán của mô hình. Trong trường hợp của chúng tôi, nó sẽ là 30% [import numpy as np import pandas as pd import matplotlib.pyplot as plt
28], bởi vì đó là một thông lệ tốt. Đừng lo lắng nếu nó không rõ ràng lúc đầu. bạn sẽ hiểu nó trong một phút.import numpy as np import pandas as pd import matplotlib.pyplot as plt
29 cần nhận giá trị số nguyên. theo cách đó bất cứ khi nào bạn chạy lạiimport numpy as np import pandas as pd import matplotlib.pyplot as plt
12, bạn sẽ nhận được kết quả tương tựimport numpy as np import pandas as pd import matplotlib.pyplot as plt
31.import numpy as np import pandas as pd import matplotlib.pyplot as plt
12 chia các tính năng của chúng tôi [poly_reg_model.fit[poly_features, y]
7] và phản hồi [poly = PolynomialFeatures[degree=2, include_bias=False]
6] thành các nhóm đào tạo và kiểm tra – ở đây chúng tôi chỉ lưu các nhóm này thành các biến. Thứ tự của các biến là rất quan trọng, vì vậy đừng xáo trộn chúng
BƯỚC 3. Tạo mô hình hồi quy đa thức
Bây giờ, hãy tạo và điều chỉnh mô hình của chúng ta, nhưng lần này, chúng ta sẽ chỉ huấn luyện mô hình của mình trên dữ liệu huấn luyện
import numpy as np import pandas as pd import matplotlib.pyplot as plt8
Lý do chúng tôi chỉ đào tạo mô hình của mình trên dữ liệu đào tạo là vì sau này chúng tôi muốn xem mô hình của chúng tôi sẽ dự đoán các phản hồi dựa trên các giá trị tính năng mà nó chưa từng thấy trước đây tốt như thế nào
Đây là cách chúng tôi có thể kiểm tra xem mô hình của chúng tôi hoạt động như thế nào trên dữ liệu chưa từng thấy trước đây
import numpy as np import pandas as pd import matplotlib.pyplot as plt9
Nó có thể là rất nhiều để đưa vào, vì vậy hãy để tôi giải thích về nó
import numpy as np import pandas as pd import matplotlib.pyplot as plt
35. Chúng tôi lưu các giá trị dự đoán mà mô hình của chúng tôi dự đoán dựa trên các giá trị tính năng chưa từng thấy trước đây [import numpy as np import pandas as pd import matplotlib.pyplot as plt
36]import numpy as np import pandas as pd import matplotlib.pyplot as plt
37. Chúng tôi nhậpimport numpy as np import pandas as pd import matplotlib.pyplot as plt
38 – biết thêm lý do trong phần tiếp theoimport numpy as np import pandas as pd import matplotlib.pyplot as plt
39. Chúng tôi lấy căn bậc hai củaimport numpy as np import pandas as pd import matplotlib.pyplot as plt
38 để lấy RMSE [lỗi bình phương trung bình căn], một chỉ số thường được sử dụng để đánh giá hiệu suất của mô hình máy học. RMSE cho biết trung bình các giá trị mà mô hình của bạn dự đoán [_______46_______41] cách xa giá trị thực [import numpy as np import pandas as pd import matplotlib.pyplot as plt
42] như thế nào. Nói đại khái. RMSE càng nhỏ, mô hình càng tốt
Nếu bạn in
import numpy as np import pandas as pd import matplotlib.pyplot as plt43, bạn sẽ nhận được số này
BƯỚC 4. Tạo mô hình hồi quy tuyến tính
Bây giờ, hãy tạo một mô hình hồi quy tuyến tính để chúng ta có thể so sánh hiệu suất của hai mô hình
x = np.arange[0, 30]0
y = [3, 4, 5, 7, 10, 8, 9, 10, 10, 23, 27, 44, 50, 63, 67, 60, 62, 70, 75, 88, 81, 87, 95, 100, 108, 135, 151, 160, 169, 179]
plt.figure[figsize=[10,6]]
plt.scatter[x, y]
plt.show[]
Như bạn có thể thấy, các bước giống như trong trường hợp mô hình hồi quy đa thức của chúng tôi. Tuy nhiên, có một sự khác biệt quan trọng. Trong phương pháp
import numpy as np import pandas as pd import matplotlib.pyplot as plt12, chúng tôi sử dụng
import numpy as np import pandas as pd import matplotlib.pyplot as plt17 thay vì
poly_reg_model.fit[poly_features, y]7 và đó là lý do chính đáng.
import numpy as np import pandas as pd import matplotlib.pyplot as plt17 chứa hai tính năng ban đầu của chúng tôi [
import numpy as np import pandas as pd import matplotlib.pyplot as plt07 và
import numpy as np import pandas as pd import matplotlib.pyplot as plt08], vì vậy mô hình hồi quy tuyến tính của chúng tôi có dạng
import numpy as np import pandas as pd import matplotlib.pyplot as plt50
Nếu bạn in
import numpy as np import pandas as pd import matplotlib.pyplot as plt51, bạn có thể thấy các giá trị của mô hình hồi quy tuyến tính cho
import numpy as np import pandas as pd import matplotlib.pyplot as plt52 và
import numpy as np import pandas as pd import matplotlib.pyplot as plt53
Tương tự, bạn có thể in phần chặn bằng
import numpy as np import pandas as pd import matplotlib.pyplot as plt54
Mặt khác,
poly_reg_model.fit[poly_features, y]7 cũng chứa các tính năng mới, được tạo ra từ
import numpy as np import pandas as pd import matplotlib.pyplot as plt07 và
import numpy as np import pandas as pd import matplotlib.pyplot as plt08, vì vậy mô hình hồi quy đa thức của chúng tôi [dựa trên đa thức bậc 2 có hai tính năng] trông như thế này
import numpy as np import pandas as pd import matplotlib.pyplot as plt58
Điều này là do
import numpy as np import pandas as pd import matplotlib.pyplot as plt59 đã thêm ba tính năng mới vào hai tính năng ban đầu [x1 [
import numpy as np import pandas as pd import matplotlib.pyplot as plt07] và x2 [
import numpy as np import pandas as pd import matplotlib.pyplot as plt08]]. x12, x22 và x1x2
x12 và x22 không cần giải thích, vì chúng tôi đã đề cập đến cách chúng được tạo trong phần “Mã hóa mô hình hồi quy đa thức bằng scikit-learning”
Điều thú vị hơn nữa là x1x2 – khi hai tính năng được nhân lên với nhau, nó được gọi là thuật ngữ tương tác. Thuật ngữ tương tác giải thích cho thực tế là giá trị của một biến có thể phụ thuộc vào giá trị của biến khác [thêm về điều này tại đây].
import numpy as np import pandas as pd import matplotlib.pyplot as plt62 đã tự động tạo thuật ngữ tương tác này cho chúng tôi, điều đó thật tuyệt phải không?
Theo đó, nếu chúng tôi in
import numpy as np import pandas as pd import matplotlib.pyplot as plt63, chúng tôi sẽ nhận được các giá trị cho năm hệ số [
import numpy as np import pandas as pd import matplotlib.pyplot as plt52,
import numpy as np import pandas as pd import matplotlib.pyplot as plt53,
import numpy as np import pandas as pd import matplotlib.pyplot as plt66,
import numpy as np import pandas as pd import matplotlib.pyplot as plt67,
import numpy as np import pandas as pd import matplotlib.pyplot as plt68]
Nhưng hãy quay lại so sánh hiệu suất của các người mẫu của chúng tôi bằng cách in
import numpy as np import pandas as pd import matplotlib.pyplot as plt69
RMSE cho mô hình hồi quy đa thức là
import numpy as np import pandas as pd import matplotlib.pyplot as plt70 [làm tròn], trong khi RMSE cho mô hình hồi quy tuyến tính là
import numpy as np import pandas as pd import matplotlib.pyplot as plt71 [làm tròn]. Mô hình hồi quy đa thức hoạt động tốt hơn gần 3 lần so với mô hình hồi quy tuyến tính. Đó là sự khác biệt ngoạn mục
Nhưng bạn biết những gì khác là ngoạn mục?
Kiến thức mới thu được của bạn về thực hiện hồi quy đa thức. 😉
Phần kết luận
Hy vọng rằng bạn đã có đủ kiến thức để hiểu cơ bản về hồi quy đa thức. Không chỉ vậy, bạn cũng nên biết một phương pháp [RMSE] để so sánh hiệu suất của các mô hình học máy
Trong suốt bài viết này, chúng tôi đã sử dụng đa thức bậc 2 cho các mô hình hồi quy đa thức của chúng tôi. Đương nhiên, bạn phải luôn kiểm tra trước khi triển khai mô hình mức độ đa thức nào hoạt động tốt nhất trên tập dữ liệu của bạn [sau khi hoàn thành bài viết này, bạn nên nghi ngờ cách thực hiện điều đó. 😉]