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.
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ừ //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[]
0Python
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[]
1Python
1df = pd.read_csv['regressionexample.csv']
2print[df.shape]
3df.describe[]
2Khi 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[]
3Python
1df = pd.read_csv['regressionexample.csv']
2print[df.shape]
3df.describe[]
4Khi 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[]
5Python
1df = pd.read_csv['regressionexample.csv']
2print[df.shape]
3df.describe[]
6Khi 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.