Đánh giá mô hình hồi quy tuyến tính python

Trong thế giới hiện đại, có quá nhiều dữ liệu trên internet. Các tổ chức cần các thuật toán hiệu quả và chặt chẽ để xử lý những khối dữ liệu khổng lồ này, đưa ra các phân tích thực tế và đưa ra các quyết định phù hợp để tối đa hóa lợi nhuận và sự hiện diện trên thị trường của họ. Có những thuật toán như vậy thường được sử dụng ngày nay cho quá trình ra quyết định

Ví dụ bên dưới chỉ sử dụng tính năng đầu tiên của tập dữ liệu

import pandas as pd
94, để minh họa các điểm dữ liệu trong biểu đồ hai chiều. Đường thẳng có thể được nhìn thấy trong biểu đồ, cho biết cách hồi quy tuyến tính cố gắng vẽ một đường thẳng sẽ giảm thiểu tốt nhất tổng bình phương còn lại giữa các phản hồi được quan sát trong tập dữ liệu và các phản hồi được dự đoán bởi xấp xỉ tuyến tính

Một cách để trả lời câu hỏi này là có dữ liệu về thời gian bạn học và số điểm bạn đạt được. Sau đó, chúng tôi có thể thử xem liệu có một mẫu trong dữ liệu đó hay không và nếu trong mẫu đó, khi bạn thêm vào số giờ, nó cũng sẽ cộng vào phần trăm điểm số

Chẳng hạn, giả sử bạn có tập dữ liệu điểm giờ, chứa các mục nhập như 1. 5h và 87. điểm 5%. Nó cũng có thể chứa 1. 61giờ, ​​2. 32h và 78%, 97% điểm. Loại dữ liệu có thể có bất kỳ giá trị trung gian nào [hoặc bất kỳ mức 'độ chi tiết' nào] được gọi là dữ liệu liên tục

Một tình huống khác là bạn có tập dữ liệu điểm giờ chứa điểm dựa trên chữ cái thay vì điểm dựa trên số, chẳng hạn như A, B hoặc C. Điểm là những giá trị rõ ràng có thể được tách biệt, vì bạn không thể có điểm A. 23, A++++++++++++ [và đến vô cùng] hoặc A * e^12. Loại dữ liệu không thể phân vùng hoặc định nghĩa chi tiết hơn được gọi là dữ liệu rời rạc

Dựa trên phương thức [dạng] dữ liệu của bạn - để tìm ra số điểm bạn sẽ nhận được dựa trên thời gian học tập của mình - bạn sẽ thực hiện hồi quy hoặc phân loại

Hồi quy được thực hiện trên dữ liệu liên tục, trong khi phân loại được thực hiện trên dữ liệu rời rạc. Hồi quy có thể là bất cứ điều gì từ dự đoán tuổi của ai đó, giá nhà hoặc giá trị của bất kỳ biến nào. Phân loại bao gồm dự đoán thứ gì đó thuộc về loại nào [chẳng hạn như khối u là lành tính hay ác tính]

Ghi chú. Dự đoán giá nhà và liệu có ung thư hay không là một nhiệm vụ không hề nhỏ và cả hai thường bao gồm các mối quan hệ phi tuyến tính. Các mối quan hệ tuyến tính khá đơn giản để lập mô hình, như bạn sẽ thấy trong giây lát

Nếu bạn muốn tìm hiểu thông qua các dự án thực tế, được dẫn dắt bằng ví dụ, trong thế giới thực, hãy xem "Dự đoán giá nhà thực hành - Học máy bằng Python" và "Phân loại ung thư vú bằng học sâu - Keras và Tensorflow" cấp độ nghiên cứu của chúng tôi

Đối với cả hồi quy và phân loại - chúng tôi sẽ sử dụng dữ liệu để dự đoán nhãn [thuật ngữ ô cho các biến mục tiêu]. Nhãn có thể là bất cứ thứ gì từ "B" [lớp] cho nhiệm vụ phân loại đến 123 [số] cho nhiệm vụ hồi quy. Vì chúng tôi cũng đang cung cấp nhãn - đây là các thuật toán học có giám sát

Trong hướng dẫn dành cho người mới bắt đầu này - chúng ta sẽ thực hiện hồi quy tuyến tính trong Python, sử dụng thư viện Scikit-Learn. Chúng ta sẽ đi qua một quy trình học máy từ đầu đến cuối. Trước tiên, chúng tôi sẽ tải dữ liệu mà chúng tôi sẽ học và trực quan hóa dữ liệu đó, đồng thời thực hiện Phân tích dữ liệu khám phá. Sau đó, chúng tôi sẽ xử lý trước dữ liệu và xây dựng các mô hình để phù hợp với dữ liệu đó [giống như một chiếc găng tay]. Mô hình này sau đó được đánh giá và nếu thuận lợi, được sử dụng để dự đoán các giá trị mới dựa trên đầu vào mới

Ghi chú. Bạn có thể tải xuống sổ ghi chép chứa tất cả mã trong hướng dẫn này tại đây

Phân tích dữ liệu thăm dò

Ghi chú. Bạn có thể tải xuống bộ dữ liệu điểm giờ tại đây

Hãy bắt đầu với phân tích dữ liệu khám phá. Bạn muốn tìm hiểu dữ liệu của mình trước - điều này bao gồm tải dữ liệu vào, trực quan hóa các tính năng, khám phá mối quan hệ của chúng và đưa ra các giả thuyết dựa trên các quan sát của bạn. Tập dữ liệu là tệp CSV [giá trị được phân tách bằng dấu phẩy], chứa số giờ đã học và điểm số đạt được dựa trên những giờ đó. Chúng tôi sẽ tải dữ liệu vào một

df.plot.scatter[x='Hours', y='Scores', title='Scatterplot of hours and scores percentages'];
7 bằng cách sử dụng Pandas

import pandas as pd

Nếu bạn chưa quen với Pandas và

df.plot.scatter[x='Hours', y='Scores', title='Scatterplot of hours and scores percentages'];
7s, hãy đọc "Hướng dẫn về Python với Pandas của chúng tôi. Hướng dẫn DataFrame với các ví dụ"

Hãy đọc tệp CSV và đóng gói nó thành một

df.plot.scatter[x='Hours', y='Scores', title='Scatterplot of hours and scores percentages'];
7

Sau khi dữ liệu được tải vào, hãy xem nhanh 5 giá trị đầu tiên bằng phương pháp

print[df.corr[]]
0

df.head[] 

Kết quả này trong

   Hours  Scores
0    2.5      21
1    5.1      47
2    3.2      27
3    8.5      75
4    3.5      30

Chúng tôi cũng có thể kiểm tra hình dạng của tập dữ liệu của mình thông qua thuộc tính

print[df.corr[]]
1

________số 8

Biết được hình dạng dữ liệu của bạn nói chung là khá quan trọng để có thể vừa phân tích vừa xây dựng các mô hình xung quanh nó

[25, 2]

Chúng tôi có 25 hàng và 2 cột - đó là 25 mục chứa một cặp giờ và điểm. Câu hỏi ban đầu của chúng tôi là liệu chúng tôi có đạt điểm cao hơn nếu học lâu hơn không. Về bản chất, chúng tôi đang yêu cầu mối quan hệ giữa Giờ và Điểm số. Vì vậy, mối quan hệ giữa các biến này là gì? . Chúng tôi sẽ vẽ số giờ trên trục X và điểm số trên trục Y và đối với mỗi cặp, điểm đánh dấu sẽ được định vị dựa trên giá trị của chúng

df.plot.scatter[x='Hours', y='Scores', title='Scatterplot of hours and scores percentages'];

Nếu bạn chưa quen với Biểu đồ phân tán - hãy đọc "Biểu đồ phân tán Matplotlib - Hướng dẫn và ví dụ" của chúng tôi

Kết quả này trong

Khi số giờ tăng lên, điểm số cũng vậy. Có một mối tương quan tích cực khá cao ở đây. Vì hình dạng của đường mà các điểm đang tạo ra có vẻ thẳng - chúng tôi nói rằng có một mối tương quan tuyến tính thuận giữa các biến Giờ và Điểm. Chúng tương quan với nhau như thế nào?

print[df.corr[]]
import pandas as pd
4

Trong bảng này, Giờ và Giờ có mối tương quan

print[df.corr[]]
4 [100%], giống như Điểm số có mối tương quan 100% với Điểm số, một cách tự nhiên. Bất kỳ biến nào cũng sẽ có 1. 1 ánh xạ với chính nó. Tuy nhiên, mối tương quan giữa Điểm số và Giờ là
print[df.corr[]]
5. Bất cứ điều gì trên
print[df.corr[]]
6 được coi là một mối tương quan tích cực mạnh mẽ

Nếu bạn muốn đọc chi tiết hơn về mối tương quan giữa các biến tuyến tính, cũng như các hệ số tương quan khác nhau, hãy đọc "Tính hệ số tương quan Pearson bằng Python với Numpy" của chúng tôi

Có mối tương quan tuyến tính cao có nghĩa là chúng ta thường có thể cho biết giá trị của một tính năng dựa trên tính năng kia. Ngay cả khi không tính toán, bạn có thể nói rằng nếu ai đó học trong 5 giờ, họ sẽ nhận được khoảng 50% số điểm của mình. Vì mối quan hệ này thực sự bền chặt - chúng tôi sẽ có thể xây dựng một thuật toán hồi quy tuyến tính đơn giản nhưng chính xác để dự đoán điểm số dựa trên thời gian nghiên cứu, trên bộ dữ liệu này

Khi chúng ta có mối quan hệ tuyến tính giữa hai biến, chúng ta sẽ xem xét một dòng. Khi có mối quan hệ tuyến tính giữa ba, bốn, năm [hoặc nhiều hơn] biến, chúng ta sẽ xem xét giao tuyến của các mặt phẳng. Trong mọi trường hợp, loại chất lượng này được định nghĩa trong đại số là tuyến tính

Pandas cũng cung cấp một phương pháp trợ giúp tuyệt vời để tóm tắt thống kê và chúng tôi có thể

print[df.corr[]]
7 tập dữ liệu để biết ý tưởng về giá trị trung bình, tối đa, tối thiểu, v.v. giá trị của các cột của chúng tôi

import pandas as pd
9
df.plot.scatter[x='Hours', y='Scores', title='Scatterplot of hours and scores percentages'];
0

Lý thuyết hồi quy tuyến tính

Các biến của chúng tôi thể hiện một mối quan hệ tuyến tính. Chúng ta có thể dự đoán bằng trực giác tỷ lệ phần trăm điểm dựa trên số giờ học. Tuy nhiên, chúng ta có thể xác định một cách chính thức hơn để làm điều này?

Phương trình mô tả bất kỳ đường thẳng nào là.
$$
y = a*x+b
$$
Trong phương trình này .

import pandas as pd
40 là nơi đường bắt đầu ở trục Y, còn được gọi là điểm chặn trục Y và
import pandas as pd
41 xác định xem đường này sẽ hướng nhiều hơn về phần trên hay phần dưới của biểu đồ [góc của đường], vì vậy nó là .

Bằng cách điều chỉnh độ dốc và đánh chặn của đường, chúng ta có thể di chuyển nó theo bất kỳ hướng nào. Do đó - bằng cách tìm ra các giá trị độ dốc và chặn, chúng ta có thể điều chỉnh một đường để phù hợp với dữ liệu của mình

Đó là nó. Đó là cốt lõi của hồi quy tuyến tính và một thuật toán thực sự chỉ tìm ra các giá trị của hệ số góc và hệ số chặn. Nó sử dụng các giá trị của

print[df.corr[]]
9 và
print[df.corr[]]
8 mà chúng tôi đã có và thay đổi các giá trị của
import pandas as pd
41 và
import pandas as pd
40. Bằng cách đó, nó khớp nhiều dòng với các điểm dữ liệu và trả về dòng gần với tất cả các điểm dữ liệu hơn hoặc dòng phù hợp nhất. Bằng cách mô hình hóa mối quan hệ tuyến tính đó, thuật toán hồi quy của chúng ta còn được gọi là mô hình. Trong quá trình này, khi chúng tôi cố gắng xác định hoặc dự đoán tỷ lệ phần trăm dựa trên số giờ, điều đó có nghĩa là biến
print[df.corr[]]
8 của chúng tôi phụ thuộc vào các giá trị của biến
print[df.corr[]]
9 của chúng tôi

Ghi chú. Trong Thống kê, người ta thường gọi

print[df.corr[]]
8 là biến phụ thuộc và
print[df.corr[]]
9 là biến độc lập. Trong Khoa học Máy tính,
print[df.corr[]]
8 thường được gọi là đích, nhãn và tính năng hoặc thuộc tính của
print[df.corr[]]
9. Bạn sẽ thấy rằng các tên hoán đổi cho nhau, hãy nhớ rằng thường có một biến mà chúng tôi muốn dự đoán và một biến khác được sử dụng để tìm giá trị của nó. Đó cũng là một quy ước để sử dụng viết hoa
import pandas as pd
92 thay vì chữ thường, trong cả Thống kê và CS

Hồi quy tuyến tính với Scikit-learning của Python

Với lý thuyết đã có sẵn - hãy bắt đầu triển khai thuật toán Hồi quy tuyến tính với Python và thư viện Scikit-Learn. Chúng ta sẽ bắt đầu với hồi quy tuyến tính đơn giản hơn và sau đó mở rộng sang hồi quy tuyến tính bội với bộ dữ liệu mới

Tiền xử lý dữ liệu

Trong phần trước, chúng tôi đã nhập Pandas, tải tệp của chúng tôi vào

df.plot.scatter[x='Hours', y='Scores', title='Scatterplot of hours and scores percentages'];
7 và vẽ biểu đồ để xem liệu có dấu hiệu của mối quan hệ tuyến tính hay không. Bây giờ, chúng tôi có thể chia dữ liệu của mình thành hai mảng - một cho đối tượng địa lý phụ thuộc và một đối tượng địa lý độc lập hoặc đối tượng mục tiêu. Vì chúng tôi muốn dự đoán tỷ lệ phần trăm điểm tùy thuộc vào số giờ đã học, nên
print[df.corr[]]
8 của chúng tôi sẽ là cột "Điểm" và
import pandas as pd
92 của chúng tôi sẽ là cột "Giờ"

Để phân tách mục tiêu và các tính năng, chúng tôi có thể gán các giá trị cột của khung dữ liệu cho các biến

print[df.corr[]]
8 và
import pandas as pd
92 của chúng tôi

df.head[] 
0

Ghi chú.

import pandas as pd
98 trả về một con gấu trúc
import pandas as pd
99. Một số thư viện có thể hoạt động trên
import pandas as pd
99 giống như trên mảng NumPy, nhưng không phải thư viện nào cũng có nhận thức này. Trong một số trường hợp, bạn sẽ muốn trích xuất mảng NumPy cơ bản mô tả dữ liệu của mình. Điều này được thực hiện dễ dàng thông qua trường ________ 201 của ________ 199

Mô hình hồi quy tuyến tính của Scikit-Learn yêu cầu đầu vào 2D và chúng tôi thực sự đang cung cấp mảng 1D nếu chúng tôi chỉ trích xuất các giá trị

Nó mong đợi đầu vào 2D vì lớp

df.plot.scatter[x='Hours', y='Scores', title='Scatterplot of hours and scores percentages'];
03 [sẽ nói thêm về nó sau] mong đợi các mục nhập có thể chứa nhiều hơn một giá trị [nhưng cũng có thể là một giá trị]. Trong cả hai trường hợp - nó phải là một mảng 2D, trong đó mỗi phần tử [giờ] thực sự là một mảng 1 phần tử

Chúng tôi đã có thể cung cấp dữ liệu

import pandas as pd
92 và
print[df.corr[]]
8 trực tiếp cho mô hình hồi quy tuyến tính của mình, nhưng nếu chúng tôi sử dụng tất cả dữ liệu của mình cùng một lúc, làm sao chúng tôi có thể biết liệu kết quả của mình có tốt không?

Nếu bạn muốn đọc thêm về các quy tắc ngón tay cái, tầm quan trọng của việc tách tập hợp, tập hợp lệ và phương pháp trợ giúp

df.plot.scatter[x='Hours', y='Scores', title='Scatterplot of hours and scores percentages'];
06, hãy đọc hướng dẫn chi tiết của chúng tôi về "Train_test_split[] của Scikit-Learn - Tập huấn luyện, kiểm tra và xác thực"

Điều này có thể dễ dàng đạt được thông qua phương thức

df.plot.scatter[x='Hours', y='Scores', title='Scatterplot of hours and scores percentages'];
06 của trình trợ giúp, phương thức này chấp nhận các mảng
import pandas as pd
92 và
print[df.corr[]]
8 của chúng tôi [cũng hoạt động trên các
df.plot.scatter[x='Hours', y='Scores', title='Scatterplot of hours and scores percentages'];
7 và chia một
df.plot.scatter[x='Hours', y='Scores', title='Scatterplot of hours and scores percentages'];
7 thành các tập huấn luyện và kiểm tra] và một
df.head[] 
02.
df.head[] 
02 là tỷ lệ phần trăm của dữ liệu tổng thể mà chúng tôi sẽ sử dụng để thử nghiệm

df.head[] 
1

Phương pháp lấy mẫu ngẫu nhiên theo tỷ lệ phần trăm mà chúng tôi đã xác định, nhưng tôn trọng các cặp X-y, vì sợ rằng việc lấy mẫu sẽ làm xáo trộn hoàn toàn mối quan hệ. Một số cách chia bài kiểm tra xe lửa phổ biến là 80/20 và 70/30

Vì quá trình lấy mẫu vốn dĩ là ngẫu nhiên nên chúng ta sẽ luôn có các kết quả khác nhau khi chạy phương thức. Để có thể có kết quả tương tự, hoặc kết quả có thể lặp lại, chúng ta có thể xác định một hằng số gọi là

df.head[] 
04 có giá trị ý nghĩa của cuộc sống [42]

df.head[] 
2

Ghi chú. Hạt giống có thể là bất kỳ số nguyên nào và được sử dụng làm hạt giống cho bộ lấy mẫu ngẫu nhiên. Hạt giống thường là ngẫu nhiên, tạo ra các kết quả khác nhau. Tuy nhiên, nếu bạn đặt thủ công, bộ lấy mẫu sẽ trả về kết quả tương tự. Người ta thường sử dụng

df.head[] 
05 làm hạt giống để tham chiếu đến bộ tiểu thuyết nổi tiếng "The Hitchhiker’s Guide to the Galaxy"

Sau đó, chúng tôi có thể chuyển

df.head[] 
04 đó cho tham số
df.head[] 
07 của phương pháp
df.head[] 
08 của chúng tôi

df.head[] 
3

Bây giờ, nếu bạn in mảng

df.head[] 
09 của mình - bạn sẽ tìm thấy số giờ học và
df.head[] 
10 chứa tỷ lệ phần trăm điểm số

Đào tạo một mô hình hồi quy tuyến tính

Chúng tôi đã chuẩn bị sẵn sàng các bộ đào tạo và kiểm tra. Scikit-Learn có rất nhiều loại mô hình mà chúng ta có thể dễ dàng nhập và đào tạo,

df.head[] 
11 là một trong số đó

df.head[] 
4

Bây giờ, chúng tôi cần khớp dòng với dữ liệu của mình, chúng tôi sẽ làm điều đó bằng cách sử dụng phương pháp

df.head[] 
12 cùng với dữ liệu
df.head[] 
09 và
df.head[] 
10 của chúng tôi

df.head[] 
5

Nếu không có lỗi nào được đưa ra - bộ hồi quy đã tìm thấy dòng phù hợp nhất. Đường này được xác định bởi các tính năng của chúng tôi và phần chặn/độ dốc. Trên thực tế, chúng ta có thể kiểm tra phần chặn và độ dốc bằng cách in các thuộc tính

df.head[] 
15 và
df.head[] 
16 tương ứng

df.head[] 
6
df.head[] 
7

Để lấy độ dốc [cũng là hệ số của x]

df.head[] 
8

Kết quả phải là

df.head[] 
9

Điều này hoàn toàn có thể được cắm vào công thức của chúng tôi từ trước đó

$$
điểm = 9. 68207815*giờ+2. 82689235
$$

Hãy kiểm tra thật nhanh xem điều này có phù hợp với dự đoán của chúng ta không

giờ=5điểm=9. 68207815∗giờ+2. 82689235điểm=51. 2672831

Với 5 giờ học, bạn có thể mong đợi khoảng 51% là điểm số. Một cách khác để giải thích giá trị chặn là - nếu một học sinh học nhiều hơn một giờ so với trước đó họ đã học cho một kỳ thi, họ có thể mong đợi tăng 9. 68% xem xét phần trăm số điểm mà họ đã đạt được trước đó

Nói cách khác, giá trị hệ số góc cho biết điều gì xảy ra với biến phụ thuộc mỗi khi có sự tăng [hoặc giảm] một đơn vị của biến độc lập

Đưa ra dự đoán

Để tránh tự chạy các phép tính, chúng ta có thể viết công thức riêng để tính giá trị

Tuy nhiên - một cách thuận tiện hơn nhiều để dự đoán các giá trị mới bằng mô hình của chúng tôi là gọi hàm

df.head[] 
17

Kết quả của chúng tôi là

df.head[] 
18, hay xấp xỉ 95%. Bây giờ chúng tôi có ước tính tỷ lệ phần trăm điểm cho mỗi giờ mà chúng tôi có thể nghĩ ra. Nhưng chúng ta có thể tin tưởng những ước tính đó? . Giờ đây, chúng tôi có thể dự đoán bằng cách sử dụng dữ liệu thử nghiệm của mình và so sánh kết quả dự đoán với kết quả thực tế của chúng tôi - kết quả thực tế cơ bản

Để đưa ra dự đoán về dữ liệu thử nghiệm, chúng tôi chuyển các giá trị

df.head[] 
19 cho phương thức
df.head[] 
17. Chúng ta có thể gán kết quả cho biến
df.head[] 
21

   Hours  Scores
0    2.5      21
1    5.1      47
2    3.2      27
3    8.5      75
4    3.5      30
0

Biến

df.head[] 
21 hiện chứa tất cả các giá trị được dự đoán cho các giá trị đầu vào trong
df.head[] 
19. Bây giờ chúng ta có thể so sánh các giá trị đầu ra thực tế cho
df.head[] 
19 với các giá trị được dự đoán, bằng cách sắp xếp chúng cạnh nhau trong cấu trúc khung dữ liệu

   Hours  Scores
0    2.5      21
1    5.1      47
2    3.2      27
3    8.5      75
4    3.5      30
1

Đầu ra trông như thế này

   Hours  Scores
0    2.5      21
1    5.1      47
2    3.2      27
3    8.5      75
4    3.5      30
2

Mặc dù mô hình của chúng tôi có vẻ không chính xác lắm, nhưng tỷ lệ phần trăm dự đoán gần với thực tế. Hãy định lượng sự khác biệt giữa giá trị thực tế và giá trị dự đoán để có được cái nhìn khách quan về cách nó thực sự hoạt động

Đánh giá mô hình

Sau khi xem dữ liệu, thấy mối quan hệ tuyến tính, đào tạo và thử nghiệm mô hình của chúng tôi, chúng tôi có thể hiểu nó dự đoán tốt như thế nào bằng cách sử dụng một số chỉ số. Đối với các mô hình hồi quy, ba chỉ số đánh giá chủ yếu được sử dụng

  1. Lỗi tuyệt đối trung bình [MAE]. Khi chúng tôi trừ các giá trị dự đoán khỏi các giá trị thực tế, thu được các lỗi, tính tổng các giá trị tuyệt đối của các lỗi đó và lấy giá trị trung bình của chúng. Số liệu này đưa ra khái niệm về sai số chung cho từng dự đoán của mô hình, càng nhỏ [gần 0] càng tốt

$$
mae = [\frac{1}{n}]\sum_{i=1}^{n}\left. Thực tế - Dự đoán \right.
$$

Ghi chú. Bạn cũng có thể gặp ký hiệu

print[df.corr[]]
8 và
df.head[] 
26 trong các phương trình.
print[df.corr[]]
8 đề cập đến các giá trị thực tế và
df.head[] 
26 đề cập đến các giá trị dự đoán

  1. Lỗi bình phương trung bình [MSE]. Nó tương tự như số liệu MAE, nhưng nó bình phương các giá trị tuyệt đối của các lỗi. Ngoài ra, như với MAE, càng nhỏ hoặc càng gần 0 thì càng tốt. Giá trị MSE được bình phương để làm cho các lỗi lớn thậm chí còn lớn hơn. Một điều cần hết sức chú ý, đó là nó thường là một số liệu khó giải thích do kích thước của các giá trị của nó và thực tế là chúng không ở cùng một tỷ lệ dữ liệu

$$
mse = \sum_{i=1}^{D}[Thực tế - Dự đoán]^2
$$

  1. Lỗi bình phương trung bình gốc [RMSE]. Cố gắng giải quyết vấn đề diễn giải được nêu ra với MSE bằng cách lấy căn bậc hai của giá trị cuối cùng của nó, để thu nhỏ nó trở lại cùng đơn vị dữ liệu. Sẽ dễ hiểu hơn và tốt hơn khi chúng ta cần hiển thị hoặc hiển thị giá trị thực của dữ liệu có lỗi. Nó cho biết mức độ dữ liệu có thể thay đổi, vì vậy, nếu chúng tôi có RMSE là 4. 35, mô hình của chúng tôi có thể mắc lỗi vì nó đã thêm 4. 35 đến giá trị thực tế, hoặc cần thiết 4. 35 để có được giá trị thực tế. Càng gần 0 càng tốt

$$
rmse = \sqrt{ \sum_{i=1}^{D}[Thực tế - Dự đoán]^2}
$

Chúng tôi có thể sử dụng bất kỳ số liệu nào trong ba số liệu đó để so sánh các mô hình [nếu chúng tôi cần chọn một số liệu]. Chúng ta cũng có thể so sánh cùng một mô hình hồi quy với các giá trị đối số khác nhau hoặc với các dữ liệu khác nhau và sau đó xem xét các chỉ số đánh giá. Điều này được gọi là điều chỉnh siêu tham số - điều chỉnh các siêu tham số ảnh hưởng đến thuật toán học tập và quan sát kết quả

Khi lựa chọn giữa các mô hình, những mô hình có lỗi nhỏ nhất thường hoạt động tốt hơn. Khi theo dõi các mô hình, nếu các số liệu trở nên tồi tệ hơn, thì phiên bản trước đó của mô hình tốt hơn hoặc có một số thay đổi đáng kể trong dữ liệu khiến mô hình hoạt động kém hơn so với hoạt động ban đầu

May mắn thay, chúng tôi không phải thực hiện bất kỳ phép tính số liệu nào theo cách thủ công. Gói Scikit-Learn đã đi kèm với các chức năng có thể được sử dụng để tìm ra giá trị của các số liệu này cho chúng tôi. Hãy tìm giá trị cho các số liệu này bằng cách sử dụng dữ liệu thử nghiệm của chúng tôi. Đầu tiên, chúng tôi sẽ nhập các mô-đun cần thiết để tính lỗi MAE và MSE. Tương ứng,

df.head[] 
29 và
df.head[] 
30

   Hours  Scores
0    2.5      21
1    5.1      47
2    3.2      27
3    8.5      75
4    3.5      30
3

Bây giờ, chúng ta có thể tính toán MAE và MSE bằng cách chuyển

df.head[] 
31 [thực tế] và
df.head[] 
21 [dự đoán] cho các phương thức. RMSE có thể được tính bằng cách lấy căn bậc hai của MSE, với điều đó, chúng tôi sẽ sử dụng phương pháp
df.head[] 
33 của NumPy

   Hours  Scores
0    2.5      21
1    5.1      47
2    3.2      27
3    8.5      75
4    3.5      30
4

Đối với các tính toán chỉ số

   Hours  Scores
0    2.5      21
1    5.1      47
2    3.2      27
3    8.5      75
4    3.5      30
5

Chúng tôi cũng sẽ in kết quả số liệu bằng cách sử dụng chuỗi

df.head[] 
34 và độ chính xác 2 chữ số sau dấu phẩy với
df.head[] 
35

   Hours  Scores
0    2.5      21
1    5.1      47
2    3.2      27
3    8.5      75
4    3.5      30
6

Kết quả của các số liệu sẽ như thế này

   Hours  Scores
0    2.5      21
1    5.1      47
2    3.2      27
3    8.5      75
4    3.5      30
7

Tất cả các lỗi của chúng tôi đều thấp - và chúng tôi đang thiếu giá trị thực 4. tối đa là 35 [thấp hơn hoặc cao hơn], đây là một phạm vi khá nhỏ khi xem xét dữ liệu chúng tôi có

Nhiều hồi quy tuyến tính

Cho đến thời điểm này, chúng tôi đã dự đoán một giá trị với hồi quy tuyến tính chỉ sử dụng một biến. Có một kịch bản khác mà chúng ta có thể xem xét, trong đó chúng ta có thể dự đoán bằng cách sử dụng nhiều biến thay vì một biến và đây cũng là một kịch bản phổ biến hơn nhiều trong cuộc sống thực, nơi nhiều thứ có thể ảnh hưởng đến một số kết quả.

Ví dụ: nếu chúng ta muốn dự đoán mức tiêu thụ khí đốt ở các bang của Hoa Kỳ, sẽ bị hạn chế khi chỉ sử dụng một biến số, chẳng hạn như thuế khí đốt, vì không chỉ thuế khí đốt ảnh hưởng đến mức tiêu thụ. Có nhiều thứ liên quan đến mức tiêu thụ khí đốt hơn là chỉ thuế khí đốt, chẳng hạn như thu nhập bình quân đầu người của người dân ở một khu vực nhất định, việc mở rộng đường cao tốc trải nhựa, tỷ lệ dân số có bằng lái xe và nhiều yếu tố khác. Một số yếu tố ảnh hưởng đến mức tiêu thụ nhiều hơn những yếu tố khác - và đây là nơi các hệ số tương quan thực sự hữu ích

Trong trường hợp như thế này, khi sử dụng nhiều biến là hợp lý, hồi quy tuyến tính trở thành hồi quy tuyến tính bội

Ghi chú. Một danh pháp khác cho hồi quy tuyến tính với một biến độc lập là hồi quy tuyến tính đơn biến. Và đối với hồi quy tuyến tính bội, với nhiều biến độc lập, là hồi quy tuyến tính đa biến

Thông thường, dữ liệu trong thế giới thực, bằng cách có nhiều biến hơn với phạm vi giá trị lớn hơn hoặc nhiều biến hơn và cả mối quan hệ phức tạp giữa các biến - sẽ liên quan đến hồi quy tuyến tính bội thay vì hồi quy tuyến tính đơn giản

Điều đó có nghĩa là, trên cơ sở hàng ngày, nếu có sự tuyến tính trong dữ liệu của bạn, thì có thể bạn sẽ áp dụng hồi quy tuyến tính bội cho dữ liệu của mình

Phân tích dữ liệu thăm dò

Để hiểu thực tế về hồi quy tuyến tính bội, hãy tiếp tục làm việc với ví dụ về mức tiêu thụ khí đốt của chúng tôi và sử dụng bộ dữ liệu có dữ liệu về mức tiêu thụ khí đốt trên 48 tiểu bang của Hoa Kỳ

Ghi chú. Bạn có thể tải xuống bộ dữ liệu tiêu thụ gas trên Kaggle. Bạn có thể tìm hiểu thêm về các chi tiết trên bộ dữ liệu tại đây

Theo những gì chúng tôi đã làm với hồi quy tuyến tính, chúng tôi cũng sẽ muốn biết dữ liệu của mình trước khi áp dụng hồi quy tuyến tính bội. Đầu tiên, chúng ta có thể nhập dữ liệu bằng phương pháp pandas

df.head[] 
36

   Hours  Scores
0    2.5      21
1    5.1      47
2    3.2      27
3    8.5      75
4    3.5      30
8

Bây giờ chúng ta có thể xem năm hàng đầu tiên với

df.head[] 
37

   Hours  Scores
0    2.5      21
1    5.1      47
2    3.2      27
3    8.5      75
4    3.5      30
9

Kết quả này trong

df.shape
0

Chúng ta có thể xem dữ liệu của mình có bao nhiêu hàng và cột với

print[df.corr[]]
1

________số 8

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

Màn hình nào

df.shape
2

Trong tập dữ liệu này, chúng tôi có 48 hàng và 5 cột. Khi phân loại kích thước của tập dữ liệu, cũng có sự khác biệt giữa Thống kê và Khoa học máy tính

Trong Thống kê, một tập dữ liệu có hơn 30 hoặc hơn 100 hàng [hoặc quan sát] đã được coi là lớn, trong khi đó trong Khoa học Máy tính, một tập dữ liệu thường phải có ít nhất 1.000-3.000 hàng để được coi là "lớn". "Lớn" cũng rất chủ quan - một số coi 3.000 là lớn, trong khi một số cho là 3.000.000 là lớn

Không có sự đồng thuận về kích thước của tập dữ liệu của chúng tôi. Hãy tiếp tục khám phá nó và xem số liệu thống kê mô tả của dữ liệu mới này. Lần này, chúng tôi sẽ tạo điều kiện thuận lợi cho việc so sánh các số liệu thống kê bằng cách làm tròn các giá trị thành hai chữ số thập phân bằng phương pháp

df.head[] 
39 và chuyển đổi bảng bằng thuộc tính
df.head[] 
40

df.shape
3

Bảng của chúng tôi hiện có chiều rộng cột thay vì chiều rộng hàng

df.shape
4

Ghi chú. Bảng chuyển đổi sẽ tốt hơn nếu chúng ta muốn so sánh giữa các số liệu thống kê và bảng gốc sẽ tốt hơn nếu chúng ta muốn so sánh giữa các biến

Bằng cách xem xét các cột tối thiểu và tối đa của bảng mô tả, chúng tôi thấy rằng giá trị tối thiểu trong dữ liệu của chúng tôi là ________ 541 và giá trị tối đa là ________ 542. Điều này có nghĩa là phạm vi dữ liệu của chúng tôi là

df.head[] 
43 [17,782 - 0. 45 = 17,781. 55], rất rộng - có nghĩa là độ biến thiên dữ liệu của chúng tôi cũng cao

Ngoài ra, bằng cách so sánh các giá trị của cột trung bình và tiêu chuẩn, chẳng hạn như

df.head[] 
44 và
df.head[] 
45,
df.head[] 
46 và
df.head[] 
47, v.v. , chúng ta có thể thấy rằng phương tiện thực sự cách xa độ lệch chuẩn. Điều đó ngụ ý rằng dữ liệu của chúng tôi khác xa với giá trị trung bình, phi tập trung - điều này cũng làm tăng thêm sự thay đổi

Chúng tôi đã có hai dấu hiệu cho thấy dữ liệu của chúng tôi bị dàn trải, điều này không có lợi cho chúng tôi, vì việc có một dòng có thể khớp từ 0 trở nên khó khăn hơn. 45 đến 17,782 - theo thuật ngữ thống kê, để giải thích sự thay đổi đó

Dù bằng cách nào, điều quan trọng là chúng ta vẽ biểu đồ dữ liệu. Dữ liệu có hình dạng [mối quan hệ] khác nhau có thể có cùng thống kê mô tả. Vì vậy, hãy tiếp tục và xem xét các điểm của chúng tôi trong biểu đồ

Ghi chú. Vấn đề có dữ liệu với các hình dạng khác nhau có cùng số liệu thống kê mô tả được định nghĩa là Anscombe's Quartet. Bạn có thể xem các ví dụ về nó ở đây

Một ví dụ khác về hệ số giống nhau giữa các mối quan hệ khác nhau là Tương quan Pearson [kiểm tra tương quan tuyến tính]

Dữ liệu này rõ ràng có một khuôn mẫu. Mặc dù, nó phi tuyến tính và dữ liệu không có tương quan tuyến tính, do đó, Hệ số Pearson là

df.head[] 
48 đối với hầu hết chúng. Nó cũng sẽ là
df.head[] 
48 đối với tiếng ồn ngẫu nhiên

Một lần nữa, nếu bạn muốn đọc thêm về Hệ số Pearson, hãy đọc chuyên sâu "Tính hệ số tương quan Pearson bằng Python với Numpy"

Trong kịch bản hồi quy đơn giản của chúng tôi, chúng tôi đã sử dụng biểu đồ phân tán của các biến phụ thuộc và biến độc lập để xem liệu hình dạng của các điểm có gần với một đường thẳng hay không. Trong kịch bản hiện tại, chúng tôi có bốn biến độc lập và một biến phụ thuộc. Để thực hiện biểu đồ phân tán với tất cả các biến sẽ yêu cầu một thứ nguyên cho mỗi biến, dẫn đến biểu đồ 5D

Chúng tôi có thể tạo một biểu đồ 5D với tất cả các biến, sẽ mất một lúc và hơi khó đọc - hoặc chúng tôi có thể vẽ một biểu đồ phân tán cho từng biến độc lập và biến phụ thuộc để xem liệu có mối quan hệ tuyến tính giữa chúng không

Theo Ockham's razor [còn được gọi là Occam's razor] và PEP20 của Python - "đơn giản tốt hơn phức tạp" - chúng ta sẽ tạo vòng lặp for với biểu đồ cho từng biến

Ghi chú. Dao cạo của Ockham/Occam là một nguyên tắc triết học và khoa học phát biểu rằng lý thuyết hoặc lời giải thích đơn giản nhất sẽ được ưu tiên hơn so với các lý thuyết hoặc lời giải thích phức tạp.

Lần này, chúng tôi sẽ sử dụng Seaborn, một phần mở rộng của Matplotlib mà Pandas sử dụng bí mật khi vẽ sơ đồ

Lưu ý trong đoạn mã trên, rằng chúng tôi đang nhập Seaborn, tạo danh sách các biến mà chúng tôi muốn vẽ biểu đồ và lặp qua danh sách đó để vẽ từng biến độc lập với biến phụ thuộc của chúng tôi

Biểu đồ Seaborn mà chúng tôi đang sử dụng là

df.head[] 
50, là biểu đồ rút gọn từ biểu đồ hồi quy. Đó là một biểu đồ phân tán đã vẽ dữ liệu phân tán cùng với đường hồi quy. Nếu bạn muốn xem biểu đồ phân tán không có đường hồi quy, hãy sử dụng
df.head[] 
51 để thay thế

Đây là bốn lô của chúng tôi

Khi nhìn vào regplots, có vẻ như

df.head[] 
52 và
df.head[] 
53 có mối quan hệ tuyến tính tiêu cực yếu với
df.head[] 
54. Dường như
df.head[] 
55 có mối quan hệ tuyến tính tích cực mạnh mẽ với
df.head[] 
54 và biến
df.head[] 
57 không có mối quan hệ nào với
df.head[] 
54

Chúng tôi cũng có thể tính toán mối tương quan của các biến mới, lần này sử dụng Seaborn's

df.head[] 
59 để giúp chúng tôi phát hiện mối tương quan mạnh nhất và yếu hơn dựa trên tông màu ấm hơn [đỏ] và lạnh hơn [xanh dương]

Có vẻ như bản đồ nhiệt chứng thực phân tích trước đây của chúng tôi.

df.head[] 
52 và
df.head[] 
53 có mối quan hệ tuyến tính tiêu cực yếu tương ứng là
df.head[] 
62 và
df.head[] 
63 với
df.head[] 
54.
df.head[] 
55 có mối quan hệ tuyến tính tích cực mạnh mẽ của
df.head[] 
66 với
df.head[] 
54 và tương quan của
df.head[] 
57 là của
df.head[] 
69 - điều này cho thấy không có mối quan hệ nào với
df.head[] 
54

Mối tương quan không ngụ ý quan hệ nhân quả, nhưng chúng ta có thể tìm thấy quan hệ nhân quả nếu chúng ta có thể giải thích thành công các hiện tượng bằng mô hình hồi quy của mình

Một điều quan trọng khác cần lưu ý trong biểu đồ chính quy là có một số điểm rất xa so với nơi tập trung hầu hết các điểm, chúng tôi đã mong đợi điều gì đó tương tự sau sự khác biệt lớn giữa cột trung bình và tiêu chuẩn - những điểm đó có thể là dữ liệu ngoại lệ và giá trị cực đoan

Ghi chú. Giá trị ngoại lai và giá trị cực đoan có các định nghĩa khác nhau. Mặc dù các giá trị ngoại lệ không tuân theo hướng tự nhiên của dữ liệu và trôi xa khỏi hình dạng mà nó tạo ra - các giá trị cực trị có cùng hướng với các điểm khác nhưng quá cao hoặc quá thấp theo hướng đó, khác xa với các điểm cực trị trong

Mô hình hồi quy tuyến tính, đơn biến hoặc đa biến, sẽ tính đến các giá trị cực trị và ngoại lệ này khi xác định độ dốc và các hệ số của đường hồi quy. Xem xét những gì đã biết về công thức hồi quy tuyến tính

$$
điểm = 9. 68207815*giờ+2. 82689235
$$

Nếu chúng tôi có điểm ngoại lệ trong 200 giờ, thì đó có thể là lỗi đánh máy - điểm này sẽ vẫn được sử dụng để tính điểm cuối cùng

điểm=9. 68207815∗200+2. 82689235điểm=1939. 24252235

Chỉ một ngoại lệ có thể làm cho giá trị độ dốc của chúng tôi lớn hơn 200 lần. Điều tương tự cũng xảy ra đối với hồi quy tuyến tính bội. Công thức hồi quy tuyến tính bội về cơ bản là phần mở rộng của công thức hồi quy tuyến tính với nhiều giá trị độ dốc hơn

$$
y = b_0 + b_1 * x_1 + b_2 * x_2 + b_3 * x_3 + \ldots + b_n * x_n
$$

Chủ Đề