Python hồi quy phi tuyến tính

Hồi quy là kỹ thuật học máy có giám sát dự đoán kết quả liên tục. Chủ yếu có hai loại thuật toán hồi quy - tuyến tính và phi tuyến tính. Mặc dù các mô hình tuyến tính rất hữu ích, nhưng chúng dựa trên giả định về mối quan hệ tuyến tính giữa các biến độc lập và biến phụ thuộc. Trong môi trường kinh doanh thực tế, giả định này thường khó đáp ứng. Đây là lúc các thuật toán hồi quy phi tuyến tính có thể nắm bắt được tính phi tuyến tính trong dữ liệu

Trong hướng dẫn này, trọng tâm sẽ là Cây hồi quy và Rừng ngẫu nhiên, là các thuật toán phi tuyến tính dựa trên cây. Như mọi khi, bước đầu tiên là hiểu Tuyên bố vấn đề

Báo cáo vấn đề

Trong hướng dẫn này, chúng tôi sẽ cố gắng xây dựng các thuật toán hồi quy để dự đoán tỷ lệ thất nghiệp trong một nền kinh tế. Dữ liệu được sử dụng trong dự án này được tạo ra từ dữ liệu chuỗi thời gian kinh tế của Hoa Kỳ có sẵn từ http. //nghiên cứu. ăn kiêng. org/fred2. Dữ liệu chứa 574 hàng và 5 biến, như được mô tả bên dưới

  • psavert - tỷ lệ tiết kiệm cá nhân
  • pce - chi tiêu tiêu dùng cá nhân, tính bằng tỷ đô la
  • uempmed - thời gian thất nghiệp trung bình, tính bằng tuần
  • pop - tổng dân số, tính bằng nghìn
  • thất nghiệp - số người thất nghiệp tính bằng nghìn người [biến phụ thuộc]

Số liệu đánh giá

Chúng tôi sẽ đánh giá hiệu suất của mô hình bằng cách sử dụng hai số liệu - Giá trị bình phương R và Lỗi bình phương trung bình gốc [RMSE]. Lý tưởng nhất là RMSE thấp hơn và giá trị bình phương R cao hơn là biểu thị của một mô hình tốt

bước

Trong hướng dẫn này, chúng tôi sẽ làm theo các bước sau

Bước 1 - Tải các thư viện và mô-đun cần thiết

Bước 2 - Tải dữ liệu và thực hiện kiểm tra dữ liệu cơ bản

Bước 3 - Tạo mảng cho các tính năng và biến phản hồi

Bước 4 - Tạo tập dữ liệu huấn luyện và kiểm tra

Bước 5 - Xây dựng, dự đoán và đánh giá các mô hình - Cây quyết định và Rừng ngẫu nhiên

Các phần sau đây sẽ đề cập đến các bước này

Bước 1 - Tải các thư viện và mô-đun cần thiết

1import pandas as pd
2import numpy as np
3from sklearn import model_selection
4from sklearn.linear_model import LinearRegression
5from sklearn.linear_model import Ridge
6from sklearn.linear_model import Lasso
7from sklearn.linear_model import ElasticNet
8from sklearn.neighbors import KNeighborsRegressor
9from sklearn.tree import DecisionTreeRegressor
10from sklearn.svm import SVR
11from sklearn.ensemble import RandomForestRegressor
12from sklearn.metrics import r2_score
13from sklearn.model_selection import train_test_split
14from sklearn.metrics import mean_squared_error
15from math import sqrt
16import matplotlib.pyplot as plt

con trăn

Bước 2 - Đọc dữ liệu và thực hiện kiểm tra dữ liệu cơ bản

Dòng mã đầu tiên đọc dữ liệu dưới dạng pandas dataframe, trong khi dòng thứ hai in hình dạng - 574 quan sát của 5 biến. Dòng thứ ba đưa ra số liệu thống kê tóm tắt của các biến số

Dân số trung bình là 257 triệu người, trong khi tỷ lệ thất nghiệp trung bình là 7. 8.000.000. Ngoài ra, không có giá trị nào bị thiếu vì tất cả các biến đều có 574 'đếm' bằng với số lượng bản ghi trong dữ liệu. Một quan sát quan trọng khác là sự khác biệt về quy mô của các biến. Trong khi dân số dao động từ 198 đến 321 triệu người; . 9 đến 17 phần trăm. Sự khác biệt trong quy mô này cần phải được bình thường hóa

1df = pd.read_csv['regressionexample.csv'] 
2print[df.shape]
3df.describe[]

con trăn

đầu ra

1[574, 5]
2
3
4|       | pce          | pop           | psavert    | uempmed    | unemploy     |
5|-------|--------------|---------------|------------|------------|--------------|
6| count | 574.000000   | 574.000000    | 574.000000 | 574.000000 | 574.000000   |
7| mean  | 4843.510453  | 257189.381533 | 7.936585   | 8.610105   | 7771.557491  |
8| std   | 3579.287206  | 36730.801593  | 3.124394   | 4.108112   | 2641.960571  |
9| min   | 507.400000   | 198712.000000 | 1.900000   | 4.000000   | 2685.000000  |
10| 25%   | 1582.225000  | 224896.000000 | 5.500000   | 6.000000   | 6284.000000  |
11| 50%   | 3953.550000  | 253060.000000 | 7.700000   | 7.500000   | 7494.000000  |
12| 75%   | 7667.325000  | 290290.750000 | 10.500000  | 9.100000   | 8691.000000  |
13| max   | 12161.500000 | 320887.000000 | 17.000000  | 25.200000  | 15352.000000 |

Bước 3 - Tạo mảng cho các tính năng và biến phản hồi

Dòng mã đầu tiên tạo một đối tượng của biến mục tiêu được gọi là 'cột_mục tiêu'. Dòng thứ hai cung cấp cho chúng tôi danh sách tất cả các tính năng, ngoại trừ biến mục tiêu 'thất nghiệp'

Ở trên, chúng ta đã thấy rằng đơn vị của các biến khác nhau đáng kể và có thể ảnh hưởng đến quá trình lập mô hình. Để ngăn chặn điều này, chúng tôi sẽ thực hiện chuẩn hóa thông qua chia tỷ lệ các yếu tố dự đoán trong khoảng từ 0 đến 1. Dòng thứ ba thực hiện nhiệm vụ này

Dòng thứ tư hiển thị tóm tắt dữ liệu đã chuẩn hóa. Chúng ta có thể thấy rằng tất cả các biến độc lập hiện đã được chia tỷ lệ từ 0 đến 1. Biến mục tiêu không thay đổi

1target_column = ['unemploy'] 
2predictors = list[set[list[df.columns]]-set[target_column]]
3df[predictors] = df[predictors]/df[predictors].max[]
4df.describe[]

con trăn

đầu ra

1|       | pce        | pop        | psavert    | uempmed    | unemploy     |
2|-------|------------|------------|------------|------------|--------------|
3| count | 574.000000 | 574.000000 | 574.000000 | 574.000000 | 574.000000   |
4| mean  | 0.398266   | 0.801495   | 0.466858   | 0.341671   | 7771.557491  |
5| std   | 0.294313   | 0.114466   | 0.183788   | 0.163020   | 2641.960571  |
6| min   | 0.041722   | 0.619258   | 0.111765   | 0.158730   | 2685.000000  |
7| 25%   | 0.130101   | 0.700857   | 0.323529   | 0.238095   | 6284.000000  |
8| 50%   | 0.325087   | 0.788627   | 0.452941   | 0.297619   | 7494.000000  |
9| 75%   | 0.630459   | 0.904651   | 0.617647   | 0.361111   | 8691.000000  |
10| max   | 1.000000   | 1.000000   | 1.000000   | 1.000000   | 15352.000000 |

Bước 4 - Tạo tập dữ liệu huấn luyện và kiểm tra

Chúng tôi sẽ xây dựng mô hình của mình trên tập huấn luyện và đánh giá hiệu suất của nó trên tập kiểm tra. Một vài dòng mã đầu tiên bên dưới tạo ra các mảng của các biến độc lập [X] và phụ thuộc [y] tương ứng. Dòng thứ ba chia dữ liệu thành tập dữ liệu huấn luyện và kiểm tra, với đối số 'test_size' chỉ định tỷ lệ phần trăm dữ liệu được giữ trong dữ liệu kiểm tra. Dòng thứ tư in hình của tập huấn luyện [401 quan sát của 4 biến] và tập kiểm tra [173 quan sát của 4 biến]

1X = df[predictors].values
2y = df[target_column].values
3
4X_train, X_test, y_train, y_test = train_test_split[X, y, test_size=0.30, random_state=40]
5print[X_train.shape]; print[X_test.shape]

con trăn

đầu ra

1[401, 4]
2[173, 4]

Bước 5 - Xây dựng, dự đoán và đánh giá các mô hình - Cây quyết định và rừng ngẫu nhiên

Trong bước này, chúng tôi sẽ triển khai các mô hình hồi quy phi tuyến tính, dựa trên cây khác nhau bằng cách sử dụng thư viện scikit-learn

Cây quyết định

Cây quyết định, còn được gọi là Cây phân loại và hồi quy [GIỎI], hoạt động cho cả biến đầu vào và đầu ra phân loại và liên tục. Nó hoạt động bằng cách chia dữ liệu thành hai hoặc nhiều bộ đồng nhất dựa trên bộ chia quan trọng nhất giữa các biến độc lập. Điểm khác biệt tốt nhất là điểm khác biệt tối thiểu hóa số liệu chi phí. Số liệu chi phí cho cây phân loại thường là entropy hoặc chỉ số gini, trong khi đó, đối với cây hồi quy, số liệu mặc định là lỗi bình phương trung bình

Quy trình làm việc cơ bản của Cây quyết định như sau

Quá trình mô hình hóa bắt đầu tại Nút gốc, đại diện cho toàn bộ dữ liệu. Điều này được chia thành hai hoặc nhiều nút phụ, còn được gọi là chia. Quá trình phân tách này tiếp tục cho đến khi đáp ứng tiêu chí phân tách và nút phụ nơi xảy ra quá trình phân tách được gọi là nút quyết định. Khi tiêu chí phân tách được đáp ứng, các nút sẽ không phân tách nữa; . Chúng tôi cũng có thể loại bỏ các nút phụ thông qua quy trình được gọi là Tỉa

Bây giờ chúng ta sẽ tạo mô hình hồi quy GIỎI bằng lớp DecisionTreeRegressor. Bước đầu tiên là khởi tạo thuật toán được thực hiện trong dòng mã đầu tiên bên dưới. Dòng thứ hai phù hợp với mô hình trên tập huấn luyện. Các đối số được sử dụng là max_depth, cho biết độ sâu tối đa của cây và min_samples_leaf, cho biết số lượng mẫu tối thiểu cần có tại một nút lá

1dtree = DecisionTreeRegressor[max_depth=8, min_samples_leaf=0.13, random_state=3]
2
3dtree.fit[X_train, y_train]

con trăn

đầu ra

________số 8

Khi mô hình được xây dựng trên tập huấn luyện, chúng ta có thể đưa ra dự đoán. Dòng mã đầu tiên bên dưới dự đoán trên tập huấn luyện. Dòng mã thứ hai và thứ ba in các số liệu đánh giá - RMSE và R-squared - trên tập huấn luyện. Các bước tương tự được lặp lại trên tập dữ liệu thử nghiệm ở dòng thứ tư đến thứ sáu

1# Code lines 1 to 3
2pred_train_tree= dtree.predict[X_train]
3print[np.sqrt[mean_squared_error[y_train,pred_train_tree]]]
4print[r2_score[y_train, pred_train_tree]]
5
6# Code lines 4 to 6
7pred_test_tree= dtree.predict[X_test]
8print[np.sqrt[mean_squared_error[y_test,pred_test_tree]]] 
9print[r2_score[y_test, pred_test_tree]]

con trăn

đầu ra

1df = pd.read_csv['regressionexample.csv'] 
2print[df.shape]
3df.describe[]
0

Đầu ra ở trên cho thấy RMSE là 1.176.404 cho dữ liệu huấn luyện và 1.180.376 cho dữ liệu thử nghiệm. Mặt khác, giá trị bình phương R là 80. 7 phần trăm cho dữ liệu đào tạo và 78. 5 phần trăm cho dữ liệu thử nghiệm. Đây là những con số khá, nhưng có thể cải thiện nhiều hơn bằng cách điều chỉnh tham số. Chúng tôi sẽ thay đổi các giá trị của tham số, 'max_depth', để xem điều đó ảnh hưởng như thế nào đến hiệu suất của mô hình

Bốn dòng mã đầu tiên bên dưới khởi tạo và khớp với cây hồi quy với tham số 'max_depth' lần lượt là 2 và 5. Dòng mã thứ năm và thứ sáu đưa ra dự đoán về dữ liệu huấn luyện, trong khi dòng mã thứ bảy và tám đưa ra dự đoán về dữ liệu thử nghiệm

1df = pd.read_csv['regressionexample.csv'] 
2print[df.shape]
3df.describe[]
1

con trăn

Đoạn mã dưới đây tạo ra các số liệu đánh giá - RMSE và R-squared - cho cây hồi quy đầu tiên, 'dtree1'

1df = pd.read_csv['regressionexample.csv'] 
2print[df.shape]
3df.describe[]
2

con trăn

đầu ra

1df = pd.read_csv['regressionexample.csv'] 
2print[df.shape]
3df.describe[]
3

Đầu ra ở trên cho mô hình 'dtree1' cho thấy RMSE là 1.184.486 đối với dữ liệu huấn luyện và 1.339.487 đối với dữ liệu thử nghiệm. Giá trị bình phương R là 80. 4 phần trăm cho xe lửa và 72. 3 phần trăm cho dữ liệu thử nghiệm. Mô hình này hoạt động kém hơn mô hình trước đó trong cả hai chỉ số đánh giá

Bây giờ chúng ta sẽ kiểm tra hiệu suất của mô hình cây quyết định, 'dtree2', bằng cách chạy các dòng mã sau

1df = pd.read_csv['regressionexample.csv'] 
2print[df.shape]
3df.describe[]
4

con trăn

đầu ra

1df = pd.read_csv['regressionexample.csv'] 
2print[df.shape]
3df.describe[]
5

Đầu ra trên cho thấy sự cải thiện đáng kể từ các mô hình trước đó. Bộ đào tạo và thử nghiệm RMSE lần lượt giảm xuống còn 562.529 và 686.482. Mặt khác, giá trị bình phương R cho tập huấn luyện và tập kiểm tra tăng lên 95. 6 phần trăm và 92. 7 phần trăm, tương ứng. Điều này cho thấy mô hình cây hồi quy với tham số 'max_depth' là 5 đang hoạt động tốt hơn, cho thấy việc điều chỉnh tham số có thể cải thiện hiệu suất của mô hình như thế nào

Rừng ngẫu nhiên [hoặc Tập hợp Bootstrap]

Cây quyết định rất hữu ích, nhưng vấn đề là chúng thường có xu hướng overfit dữ liệu huấn luyện dẫn đến sự khác biệt cao trong dữ liệu thử nghiệm. Thuật toán Random Forest khắc phục nhược điểm này bằng cách giảm phương sai của cây quyết định. Chúng được gọi là 'Rừng' vì chúng là tập hợp hoặc tập hợp của một số cây quyết định. Một điểm khác biệt chính giữa Mô hình Cây quyết định và Mô hình Rừng ngẫu nhiên là cách thức phân tách xảy ra. Trong Random Forest, thay vì thử phân tách trên tất cả các đối tượng địa lý, một mẫu đối tượng địa lý được chọn cho mỗi lần phân tách, do đó làm giảm phương sai của mô hình

Trong scikit-learning, lớp RandomForestRegressor được sử dụng để xây dựng cây hồi quy. Dòng mã đầu tiên bên dưới khởi tạo mô hình Hồi quy rừng ngẫu nhiên với giá trị 'n_estimators' là 500. 'n_estimators' cho biết số lượng cây trong rừng. Dòng thứ hai khớp mô hình với dữ liệu đào tạo

Dòng mã thứ ba dự đoán, trong khi dòng thứ tư và thứ năm in các số liệu đánh giá - RMSE và R-squared - trên tập huấn luyện. Các bước tương tự được lặp lại trên tập dữ liệu thử nghiệm trong dòng mã thứ sáu đến tám

1df = pd.read_csv['regressionexample.csv'] 
2print[df.shape]
3df.describe[]
6

con trăn

đầu ra

1df = pd.read_csv['regressionexample.csv'] 
2print[df.shape]
3df.describe[]
7

Đầu ra ở trên cho thấy các giá trị RMSE và R bình phương trên dữ liệu huấn luyện là 138.290 và 99. 7 phần trăm, tương ứng. Đối với dữ liệu thử nghiệm, kết quả cho các số liệu này là 280.349 và 98. 8 phần trăm, tương ứng. Hiệu suất của mô hình rừng ngẫu nhiên vượt trội hơn nhiều so với các mô hình cây quyết định được xây dựng trước đó

Sự kết luận

Trong hướng dẫn này, bạn đã tìm hiểu về các mô hình Hồi quy phi tuyến tính dựa trên cây - Cây quyết định và Rừng ngẫu nhiên. Bạn cũng đã học về cách điều chỉnh các tham số của Cây hồi quy

Chúng tôi cũng quan sát thấy rằng mô hình Rừng ngẫu nhiên hoạt động tốt hơn mô hình Cây hồi quy, với các giá trị RMSE và R bình phương được đặt thử nghiệm là 280 nghìn và 98. 8 phần trăm, tương ứng. Giá trị này gần với kết quả lý tưởng nhất của giá trị R bình phương bằng 1, cho thấy hiệu suất vượt trội của thuật toán Rừng ngẫu nhiên

Để tìm hiểu thêm về Machine Learning bằng cách sử dụng scikit-learning, vui lòng tham khảo hướng dẫn, Scikit Machine Learning

Có một hồi quy phi tuyến tính?

Hồi quy phi tuyến tính là một mô hình toán học khớp một phương trình với dữ liệu nhất định bằng cách sử dụng một dòng được tạo . Giống như trường hợp hồi quy tuyến tính sử dụng phương trình đường thẳng [chẳng hạn như Ỵ= c + m x], hồi quy phi tuyến tính thể hiện sự liên kết bằng cách sử dụng một đường cong, khiến nó trở thành phi tuyến tính trong tham số.

hồi quy phi tuyến tính giải thích với ví dụ là gì?

Hồi quy phi tuyến tính tạo ra một đường cong để phản ánh hai biến. Các nguyên tắc hoặc hàm cốt lõi được sử dụng bởi hồi quy phi tuyến tính là logarit, lượng giác và số mũ. Thay vì liên kết hai biến;

OLS có thể được sử dụng cho hồi quy phi tuyến tính không?

Các nhiệm vụ giảng dạy sử dụng OLS trong phân tích hồi quy phi tuyến tính được thảo luận. Các mô hình phi tuyến tính theo tham số, theo nghĩa là bằng phép biến đổi [log] phù hợp, các mô hình có thể được tạo thành tuyến tính theo tham số. Trong trường hợp này phương pháp Bình phương nhỏ nhất thông thường [OLS] đã được sử dụng cho các phương trình đã biến đổi .

Hồi quy phi tuyến tính trong ML là gì?

Hồi quy phi tuyến tính là kỹ thuật thống kê giúp mô tả các mối quan hệ phi tuyến tính trong dữ liệu thử nghiệm . Các mô hình hồi quy phi tuyến tính thường được coi là tham số, trong đó mô hình được mô tả dưới dạng phương trình phi tuyến tính. Thông thường, các phương pháp học máy được sử dụng cho hồi quy phi tuyến tính không tham số.

Chủ Đề