Hướng dẫn multivariate non-linear regression python sklearn - hồi quy đa biến phi tuyến tính python sklearn

Giới thiệu

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. Mặc dù các mô hình tuyến tính là hữu ích, chúng dựa vào giả định về mối quan hệ tuyến tính giữa các biến độc lập và phụ thuộc. Trong các thiết lập kinh doanh thực sự, giả định này thường khó đáp ứng. Đây là nơi các thuật toán hồi quy phi tuyến tính xuất hiện trong ảnh có thể nắm bắt được sự phi tuyến tính trong dữ liệu.

Show

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 thất nghiệp trong một nền kinh tế. Dữ liệu được sử dụng trong dự án này được sản xuất từ ​​dữ liệu chuỗi thời gian kinh tế của Hoa Kỳ có sẵn từ http://research.stlouisfed.org/fred2. Dữ liệu chứa 574 hàng và 5 biến, như được mô tả dưới đây:

  • PSAVERT - Tỷ lệ tiết kiệm cá nhân.
  • PCE - Chi tiêu tiêu dùng cá nhân, bằng hàng tỷ đô la.
  • UEMPMED - Thời gian thất nghiệp trung bình, trong vài tuần.
  • Pop - Tổng dân số, trong hàng ngàn.
  • Thất nghiệp - Số lượng thất nghiệp trong hàng ngàn (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 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à các giá trị R-bình phương cao hơn là dấu hiệu của một mô hình tốt.

Các 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 bộ dữ liệu đào tạo 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 sẽ bao gồm 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

Python

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 trong dữ liệu dưới dạng gấu trúc 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, trong khi thất nghiệp trung bình ở mức 7,8 triệu. Ngoài ra, không có giá trị bị thiếu, vì tất cả các biến có 574 'đếm' bằng 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ố có một khoảng từ 198 đến 321 triệu; Tỷ lệ tiết kiệm cá nhân, 'PSAVERT', có phạm vi từ 1,9 đến 17 phần trăm. Sự khác biệt này trong thang đo cần phải được chuẩn hóa.

1df = pd.read_csv('regressionexample.csv') 
2print(df.shape)
3df.describe()

Python

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 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 trong dữ liệu dưới dạng gấu trúc 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, trong khi thất nghiệp trung bình ở mức 7,8 triệu. Ngoài ra, không có giá trị bị thiếu, vì tất cả các biến có 574 'đếm' bằng 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ố có một khoảng từ 198 đến 321 triệu; Tỷ lệ tiết kiệm cá nhân, 'PSAVERT', có phạm vi từ 1,9 đến 17 phần trăm. Sự khác biệt này trong thang đo cần phải được chuẩn hóa.

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

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

Python

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 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 trong dữ liệu dưới dạng gấu trúc 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ố.

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)

Python

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 trong dữ liệu dưới dạng gấu trúc 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, trong khi thất nghiệp trung bình ở mức 7,8 triệu. Ngoài ra, không có giá trị bị thiếu, vì tất cả các biến có 574 'đếm' bằng 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ố có một khoảng từ 198 đến 321 triệu; Tỷ lệ tiết kiệm cá nhân, 'PSAVERT', có phạm vi từ 1,9 đến 17 phần trăm. Sự khác biệt này trong thang đo cần phải được chuẩn hóa.

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

Quy trình công 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à tách. Quá trình phân tách này tiếp tục cho đến khi tiêu chí chia tách được đáp ứng và nút phụ nơi việc chia tách xảy ra được gọi là nút quyết định. Một khi tiêu chí chia tách được đáp ứng, các nút không phân chia thêm nữa; Các nút như vậy được gọi là nút lá hoặc đầu cuối. Chúng ta cũng có thể loại bỏ các nút phụ thông qua quá trình gọi là cắt tỉa.Root Node, which represents the entire data. This is divided into two or more sub-nodes, also referred to as splitting. This process of splitting continues until the splitting criterion is met, and the sub-node where splitting happens is called a decision node. Once the splitting criterion is met, the nodes do not split any further; such nodes are called a Leaf or Terminal node. We can also remove sub-nodes through the process called Pruning.

Bây giờ chúng tôi sẽ tạo ra một mô hình hồi quy giỏ hàng bằng cách sử dụng lớp ra quyết định. 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 bộ đào tạo. Các đối số được sử dụng là MAX_DEPTH, biểu thị độ sâu tối đa của cây và min_samples_leaf, cho thấy số lượng mẫu tối thiểu cần phải ở nút lá.max_depth, which indicates the maximum depth of the tree, and min_samples_leaf, that indicates the minimum number of samples required to be at a leaf node.

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

Python

1DecisionTreeRegressor(criterion='mse', max_depth=8, max_features=None,
2               max_leaf_nodes=None, min_impurity_decrease=0.0,
3               min_impurity_split=None, min_samples_leaf=0.13,
4               min_samples_split=2, min_weight_fraction_leaf=0.0,
5               presort=False, random_state=3, splitter='best')

Khi mô hình được xây dựng trên bộ đào tạo, chúng ta có thể đưa ra dự đoán. Dòng mã đầu tiên dưới đây dự đoán trên bộ đào tạo. Các dòng mã thứ hai và thứ ba in các số liệu đánh giá - RMSE và R -bình phương - trên bộ đào tạo. Các bước tương tự được lặp lại trên bộ 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))

Python

11176.4038283170603
20.807082155638476
31180.376221946623
40.7849943413269588

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

Đầu ra trên cho thấy RMSE là 1.176.404 cho dữ liệu tàu và 1.180.376 cho dữ liệu thử nghiệm. Mặt khác, giá trị R-bình phương là 80,7 % cho dữ liệu tàu và 78,5 % cho dữ liệu thử nghiệm. Đây là những con số khá, nhưng cải thiện nhiều hơn có thể được thực hiệ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 đến hiệu suất mô hình như thế nào.

1df = pd.read_csv('regressionexample.csv') 
2print(df.shape)
3df.describe()
0

Python

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

1df = pd.read_csv('regressionexample.csv') 
2print(df.shape)
3df.describe()
1

Python

1df = pd.read_csv('regressionexample.csv') 
2print(df.shape)
3df.describe()
2

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

Đầu ra trên cho thấy RMSE là 1.176.404 cho dữ liệu tàu và 1.180.376 cho dữ liệu thử nghiệm. Mặt khác, giá trị R-bình phương là 80,7 % cho dữ liệu tàu và 78,5 % cho dữ liệu thử nghiệm. Đây là những con số khá, nhưng cải thiện nhiều hơn có thể được thực hiệ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 đến hiệu suất mô hình như thế nào.

1df = pd.read_csv('regressionexample.csv') 
2print(df.shape)
3df.describe()
3

Python

1df = pd.read_csv('regressionexample.csv') 
2print(df.shape)
3df.describe()
4

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

Đầu ra trên cho thấy RMSE là 1.176.404 cho dữ liệu tàu và 1.180.376 cho dữ liệu thử nghiệm. Mặt khác, giá trị R-bình phương là 80,7 % cho dữ liệu tàu và 78,5 % cho dữ liệu thử nghiệm. Đây là những con số khá, nhưng cải thiện nhiều hơn có thể được thực hiệ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 đến hiệu suất mô hình như thế nào.

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

Mã bên dưới tạo ra các số liệu đánh giá - RMSE và R -bình phương - cho cây hồi quy đầu tiên, 'DTREE1'.

Đầu ra trên cho mô hình 'DTREE1' cho thấy RMSE là 1.184.486 cho dữ liệu tàu và 1.339.487 cho dữ liệu thử nghiệm. Giá trị R-bình phương là 80,4 phần trăm cho tàu hỏa và 72,3 % cho dữ liệu thử nghiệm. Mô hình này đang thực hiện mô hình trước đây trong cả hai số liệu đánh giá.

1df = pd.read_csv('regressionexample.csv') 
2print(df.shape)
3df.describe()
5

Python

1df = pd.read_csv('regressionexample.csv') 
2print(df.shape)
3df.describe()
6

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

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 đã tìm hiểu 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 vượt trội so với các mô hình cây hồi quy, với các giá trị RMSE và R-bình phương RMSE lần lượt là 280 nghìn và 98,8 %. Điều này gần với kết quả lý tưởng nhất của giá trị R-bình phương là 1, cho thấy hiệu suất vượt trội của thuật toán rừng ngẫu nhiên.

Làm thế nào để bạn chạy một hồi quy phi tuyến tính trong Python?

Đối với vấn đề hồi quy phi tuyến tính, bạn có thể thử svr (), kneighborsregratoror () hoặc ra quyết định () từ sklearn và so sánh hiệu suất mô hình trên tập kiểm tra. Lưu câu trả lời này.

Hồi quy tuyến tính đa biến trong Python là gì?

Hồi quy tuyến tính là một thuật toán học máy trong đó chúng tôi cung cấp nhiều biến độc lập cho một biến phụ thuộc duy nhất.Tuy nhiên, hồi quy tuyến tính chỉ yêu cầu một biến độc lập làm đầu vào.a machine learning algorithm where we provide multiple independent variables for a single dependent variable. However, linear regression only requires one independent variable as input.

Là hồi quy không tuyến tính rừng ngẫu nhiên?

Ngoài việc phân loại, rừng ngẫu nhiên cũng có thể được sử dụng cho các nhiệm vụ hồi quy.Bản chất phi tuyến của một khu rừng ngẫu nhiên có thể cung cấp cho nó một chân trên các thuật toán tuyến tính, làm cho nó trở thành một lựa chọn tuyệt vời.Tuy nhiên, điều quan trọng là phải biết dữ liệu của bạn và hãy nhớ rằng một khu rừng ngẫu nhiên không thể ngoại suy.A Random Forest's nonlinear nature can give it a leg up over linear algorithms, making it a great option. However, it is important to know your data and keep in mind that a Random Forest can't extrapolate.

Sự tuyến tính trong sklearn là gì?

Độ tuyến tính phù hợp với mô hình tuyến tính với các hệ số W = (W1, Tiết, WP) để giảm thiểu tổng bình phương còn lại giữa các mục tiêu được quan sát trong bộ dữ liệu và các mục tiêu được dự đoán bởi xấp xỉ tuyến tính.Tham số: FIT_InterceptBool, Default = true.Có tính toán chặn cho mô hình này.fits a linear model with coefficients w = (w1, …, wp) to minimize the residual sum of squares between the observed targets in the dataset, and the targets predicted by the linear approximation. Parameters: fit_interceptbool, default=True. Whether to calculate the intercept for this model.