Làm thế nào để bạn thực hiện hồi quy bậc hai trong python?

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ẫn

from 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]
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[]
1 là một biểu thức toán học đơn giản bao gồm hai số hạng.
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[]
2 [học kỳ đầu tiên] và
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[]
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
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[]
4 hoặc
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[]
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

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[]
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,
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[]
7 cũng là một đa thức, mặc dù nó không có “nhiều số hạng” [
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[]
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

Hiện tại, hãy gắn bó với

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[]
1. Tôi vẽ nó cho bạn

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

  1. chúng tôi đã lấy một đa thức [
    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[]
    1],
  2. âm mưu nó,
  3. 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 PolynomialFeatures
1 đề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]
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[]
1 là một đa thức khi số hạng thứ hai [
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[]
3] rõ ràng thiếu biến
from sklearn.preprocessing import PolynomialFeatures
6?

Trên thực tế,

from sklearn.preprocessing import PolynomialFeatures
6 có ở dạng
from sklearn.preprocessing import PolynomialFeatures
8. Vì
from sklearn.preprocessing import PolynomialFeatures
9 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]
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[]
3, nên thực sự không cần viết
from sklearn.preprocessing import PolynomialFeatures
9

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ủa
    poly = 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 PolynomialFeatures
6 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 PolynomialFeatures
6] 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

  1. Làm cách nào để thiết lập bậc của đa thức [và do đó là số lượng ß]?
  2. 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 LinearRegression
0, 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 LinearRegression
2 sau này

Mẩu chuyện dài.

from sklearn.linear_model import LinearRegression
2 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 LinearRegression
4 thành
from sklearn.linear_model import LinearRegression
5. 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 LinearRegression
8 – 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 LinearRegression
9, 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 PolynomialFeatures
6 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 PolynomialFeatures
6 [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 PolynomialFeatures
6 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 plt
03

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 plt
04] 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 plt
0

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 plt
1

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 plt
3

Cần có

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
06 để 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 plt
07 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 plt
08 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 plt
4

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 plt
5

Đâ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 plt
10 [
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
11 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 plt
6

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
12 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 plt
7

Đây là một lời giải thích từng bước

  1. 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ột
    import 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ành
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    17, cột
    poly = PolynomialFeatures[degree=2, include_bias=False]
    6 thành
    poly = 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ệt
  2. import 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ới
  3. import 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ới
    import 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ại
    import 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ự
  4. 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 plt
8

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 plt
9

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ập
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    38 – biết thêm lý do trong phần tiếp theo
  • import 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ủa
    import 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 plt
43, 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]
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[]
0

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 plt
12, chúng tôi sử dụng
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
17 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 plt
17 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 plt
07 và
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
08], 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 plt
50

Nếu bạn in

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
51, 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 plt
52 và
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
53

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 plt
54

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 plt
07 và
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
08, 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 plt
58

Điều này là do

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
59 đã 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 plt
07] và x2 [
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
08]]. 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 plt
62 đã 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 plt
63, 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 plt
52,
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
53,
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
66,
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
67,
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
68]

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 plt
69

RMSE cho mô hình hồi quy đa thức là

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
70 [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 plt
71 [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 đó. 😉]

Chủ Đề