Vẽ đường hồi quy python

Bài viết này hướng dẫn vẽ đường hồi quy trong Python. Nó sẽ tập trung vào hồi quy tuyến tính. Chúng ta sẽ tìm hiểu các khái niệm quan trọng với code trong python. Sau khi hoàn thành, chúng tôi sẽ có thể xây dựng, cải thiện và tối ưu hóa các mô hình hồi quy

Hồi quy là gì?

Trước khi thảo luận về cách vẽ đường hồi quy trong python, chúng ta nên hiểu hồi quy là gì

Hồi quy là thuật toán đầu tiên chúng ta cần nắm vững nếu muốn trở thành nhà khoa học dữ liệu. Đây là một trong những thuật toán dễ học nhất nhưng đòi hỏi sự hiểu biết và nỗ lực để thành thạo nó

Thuật ngữ “sự hồi quy” được Francis Galton sử dụng trong bài báo năm 1886 của ông “Sự hồi quy về sự tầm thường trong tầm vóc di truyền”. Anh ấy đã sử dụng thuật ngữ này trong bối cảnh hồi quy về giá trị trung bình

Vẽ đường hồi quy python

Ngày nay hồi quy có một ý nghĩa rộng hơn. Đó là bất kỳ mô hình nào đưa ra dự đoán liên tục

Hồi quy là một kỹ thuật tham số được sử dụng để dự đoán giá trị của biến kết quả Y dựa trên một hoặc nhiều biến dự đoán đầu vào X. Bản chất nó là tham số vì nó đưa ra các giả định nhất định dựa trên tập dữ liệu. Nếu tập dữ liệu tuân theo những giả định đó, hồi quy cho kết quả đáng kinh ngạc. Mặt khác, nó đấu tranh để cung cấp độ chính xác thuyết phục

Phân tích hồi quy giúp chúng ta tìm ra câu trả lời cho

  • Dự đoán các quan sát trong tương lai
  • Tìm mối liên hệ, mối quan hệ giữa các biến
  • Xác định biến nào đóng góp nhiều hơn vào việc dự đoán kết quả trong tương lai

Các loại vấn đề hồi quy

Hồi quy tuyến tính cơ bản

Nếu mô hình xử lý một đầu vào, được gọi là biến độc lập hoặc biến dự đoán và một biến đầu ra, được gọi là biến phụ thuộc hoặc biến phản hồi thì nó được gọi là Hồi quy tuyến tính đơn giản. Loại hồi quy tuyến tính này giả định rằng tồn tại mối quan hệ tuyến tính giữa yếu tố dự đoán và biến phản hồi có dạng

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

Nếu vấn đề chứa nhiều hơn một biến đầu vào và một biến phản hồi, thì nó được gọi là Hồi quy đa tuyến tính

Vẽ đường hồi quy

Mục đích của hồi quy tuyến tính là thiết lập mối quan hệ tuyến tính (một công thức toán học) giữa (các) biến dự đoán và biến phản hồi. Phương trình toán học này có thể được khái quát thành Y = β1 + β2X + ϵ

Vẽ đường hồi quy python

X là biến đầu vào đã biết và nếu chúng ta có thể ước tính β1, β2 bằng một số phương pháp thì Y có thể được dự đoán. Để dự đoán kết quả trong tương lai, bằng cách sử dụng dữ liệu huấn luyện, chúng ta cần ước tính các tham số mô hình chưa biết (β1 β2 )

  • β1 là hệ số chặn. Đó là giá trị dự đoán bạn nhận được khi X = 0
  • β2 là độ dốc. Nó giải thích sự thay đổi của Y khi X thay đổi 1 đơn vị
  • ϵ là thuật ngữ lỗi, phần của Y mô hình hồi quy không giải thích được. ϵ đại diện cho giá trị còn lại, i. e. sự khác biệt giữa giá trị thực tế và giá trị dự đoán

Nói chung, chúng được gọi là hệ số hồi quy

Lỗi là một phần không thể tránh khỏi của quá trình đưa ra dự đoán. Chúng tôi không thể loại bỏ thuật ngữ lỗi (ϵ), nhưng chúng tôi cố gắng giảm nó xuống mức thấp nhất

Để làm điều này, hồi quy sử dụng một kỹ thuật được gọi là Bình phương nhỏ nhất thông thường (OLS), Bình phương nhỏ nhất tổng quát, Bình phương nhỏ nhất theo phần trăm, Tổng bình phương nhỏ nhất, Độ lệch tuyệt đối nhỏ nhất, v.v. Trong bài viết này, chúng tôi đề cập đến kỹ thuật OLS khi sử dụng hồi quy tuyến tính/đa biến. Chúng tôi sẽ vẽ đường hồi quy trong python

Kỹ thuật OLS cố gắng giảm tổng sai số bình phương ∑[Thực tế(y) – Dự đoán(y’)] ² bằng cách tìm giá trị tốt nhất có thể của các hệ số hồi quy (β1, β2, v.v.)

OLS sử dụng lỗi bình phương có các thuộc tính toán học tốt, do đó giúp dễ dàng phân biệt và tính toán độ dốc giảm dần. Nó cũng dễ phân tích và tính toán nhanh hơn, tôi. e. nó có thể được áp dụng nhanh chóng cho các tập dữ liệu có hàng nghìn tính năng. Hơn nữa, việc giải thích OLS dễ dàng hơn nhiều so với các kỹ thuật hồi quy khác

Phân tích đồ họa của các biến

Trước khi lập mô hình hồi quy và vẽ đường hồi quy trong python, chúng ta cần hiểu về biến độc lập (predictors) và biến phụ thuộc. Cách tốt nhất để làm điều đó thông qua hình dung hành vi của họ là thông qua

  • âm mưu phân tán. giúp hình dung bất kỳ mối quan hệ tuyến tính nào giữa biến phụ thuộc (phản hồi) và biến độc lập (dự báo). Lý tưởng nhất là chúng ta có nhiều biến dự đoán, một biểu đồ phân tán được vẽ cho từng biến đối với biến phản hồi
  • Biểu đồ hộp giúp phát hiện bất kỳ quan sát ngoại lệ nào trong biến. Việc có các ngoại lệ trong công cụ dự đoán của chúng tôi có thể ảnh hưởng mạnh mẽ đến các dự đoán vì chúng có thể dễ dàng ảnh hưởng đến hướng/độ dốc của đường phù hợp nhất
  • biểu đồ mật độ. kiểm tra xem biến phản hồi có gần với quy tắc không và xem phân phối của biến dự đoán. Lý tưởng nhất là gần với phân phối chuẩn (đường cong hình chuông), không bị lệch sang trái hoặc phải được ưa thích hơn
  • tương quan. là một thước đo thống kê cho thấy mức độ phụ thuộc tuyến tính giữa hai biến, xảy ra trong một cặp. Nó có thể nhận các giá trị từ -1 đến +1. Mối tương quan giữa hai biến sẽ càng gần 1 nếu có mối quan hệ tích cực cao. Điều ngược lại là đúng đối với mối quan hệ nghịch đảo, trong trường hợp đó, mối tương quan giữa các biến sẽ gần bằng -1. Giá trị gần 0 hơn cho thấy mối quan hệ yếu giữa các biến. Một tương quan thấp (-0. 2 < x < 0. 2) có thể gợi ý rằng phần lớn biến thể của biến phản hồi (Y) không được giải thích bởi biến dự đoán (X), trong trường hợp đó, có lẽ chúng ta nên tìm kiếm các biến giải thích tốt hơn. Hiệp phương sai cung cấp thước đo độ mạnh của mối tương quan giữa hai hoặc nhiều bộ biến ngẫu nhiên

Các giả định được đưa ra trong hồi quy là gì?

Hồi quy là một kỹ thuật tham số, vì vậy nó đưa ra các giả định. Sự hiện diện của các giả định này làm cho hồi quy trở nên khá hạn chế và có điều kiện đáp ứng các giả định này. Một khi các giả định này bị vi phạm, hồi quy sẽ đưa ra các dự đoán sai lệch, thất thường. Nếu dữ liệu vi phạm các giả định hồi quy này, một giải pháp rõ ràng là sử dụng các thuật toán dựa trên cây để nắm bắt khá tốt tính phi tuyến tính

Chúng tôi cũng có thể kiểm tra chỉ số hiệu suất để ước tính vi phạm

Hãy xem xét các giả định và diễn giải của đồ thị hồi quy và vẽ đồ thị đường hồi quy trong python

Mối quan hệ tuyến tính và cộng

Tồn tại giữa biến phản hồi (Y) và yếu tố dự đoán (X). Theo tuyến tính, điều đó có nghĩa là sự thay đổi của Y khi thay đổi 1 đơn vị trong X là không đổi. Nếu chúng ta khớp một mô hình tuyến tính với một tập dữ liệu phi tuyến tính, không bổ sung, thì thuật toán hồi quy sẽ không nắm bắt được xu hướng về mặt toán học, do đó dẫn đến một mô hình không hiệu quả

Ngoài ra, điều này sẽ dẫn đến dự đoán sai trên tập dữ liệu không nhìn thấy

Bằng phép cộng, nó đề cập đến tác động của X lên Y không phụ thuộc vào các biến khác

Làm cách nào để kiểm tra mối quan hệ tuyến tính và cộng?

Tìm các biểu đồ giá trị còn lại so với giá trị được trang bị

dư vs. Biểu đồ giá trị được trang bị

Biểu đồ phân tán hiển thị phân phối của phần dư (lỗi) so với giá trị phù hợp (giá trị dự đoán). Nó tiết lộ những hiểu biết hữu ích khác nhau bao gồm cả các giá trị ngoại lệ. Các ngoại lệ trong biểu đồ này được dán nhãn theo số quan sát của chúng, giúp chúng dễ dàng phát hiện

Lý tưởng nhất là cốt truyện này không nên hiển thị bất kỳ mẫu nào. Nếu tồn tại bất kỳ hình dạng nào (đường cong, hình chữ U), điều đó cho thấy dữ liệu không tuyến tính. Điều đó có nghĩa là mô hình không nắm bắt được các hiệu ứng phi tuyến. Nhưng nếu bạn thấy sự phi tuyến tính trong tập dữ liệu. Ngoài ra, nếu đồ thị có hình phễu rõ ràng, hãy coi đó là dấu hiệu của phương sai không cố định i. e. tính không đồng nhất

Vẽ đường hồi quy python

Hình ảnh cho số dư Vs giá trị được trang bị

bước. để khắc phục vấn đề phi tuyến tính, chúng ta có thể thực hiện phép biến đổi phi tuyến tính của các yếu tố dự báo, chẳng hạn như log (X), √X hoặc X² biến đổi biến phụ thuộc

Nếu dữ liệu của bạn bị phi tuyến tính, hãy chuyển đổi các biến phụ thuộc bằng cách sử dụng sqrt, log, square, v.v. Ngoài ra, chúng tôi có thể bao gồm các thuật ngữ đa thức (X, X², X³) trong mô hình của bạn để thu được hiệu ứng phi tuyến tính

Các thuật ngữ lỗi phải có phương sai không đổi

Việc không có phương sai không đổi trong các số hạng sai số dẫn đến phương sai thay đổi. Nói chung, phương sai không cố định phát sinh khi có các giá trị ngoại lệ hoặc giá trị đòn bẩy cực đoan

Các giá trị này có trọng lượng quá lớn, do đó ảnh hưởng không tương xứng đến hiệu suất của mô hình. Khi hiện tượng này xảy ra, khoảng tin cậy cho dự đoán ngoài mẫu có xu hướng rộng hoặc hẹp một cách phi thực tế

Làm thế nào để kiểm tra phương sai thay đổi?

  • Nhìn vào biểu đồ giá trị còn lại và được trang bị. Nếu phương sai thay đổi tồn tại, biểu đồ sẽ thể hiện một mẫu hình phễu
  • Sử dụng test Breusch-Pagan/Cook–Weisberg hoặc White general test để phát hiện hiện tượng này. Nếu chúng ta tìm thấy p <0. 05, chúng ta bác bỏ giả thuyết khống và suy ra rằng có sự thay đổi phương sai
  • Quy mô vị trí lô đất
Quy mô vị trí lô đất

Biểu đồ này cho thấy phần dư được lan truyền như thế nào cùng với phạm vi của các yếu tố dự đoán. Nó tương tự như biểu đồ giá trị còn lại so với giá trị phù hợp ngoại trừ nó sử dụng các giá trị còn lại được tiêu chuẩn hóa. Chúng ta cần chứng thực những phát hiện của âm mưu này với hình phễu trong phần dư so với. giá trị được trang bị

Lý tưởng nhất là cốt truyện này không nên hiển thị bất kỳ mẫu nào. Nếu không có sự hiện diện của một lỗi mẫu được phân phối bình thường. Tuy nhiên, nếu biểu đồ hiển thị bất kỳ mẫu rõ ràng nào (có thể là hình phễu), thì điều đó có nghĩa là phân phối lỗi không bình thường

Vẽ đường hồi quy python

Hình ảnh cho Lô vị trí tỷ lệ

bước. để khắc phục vấn đề về phương sai thay đổi, hãy biến đổi biến phản hồi (Y)  bằng cách sử dụng sqrt, log, square, v.v. Ngoài ra, chúng ta có thể sử dụng phương pháp bình phương nhỏ nhất có trọng số để giải quyết vấn đề này

Không được có tương quan giữa các biến độc lập

Đa cộng tuyến là sự hiện diện của mối tương quan trong các biến độc lập. Nếu các biến có tương quan với nhau, mô hình sẽ cực kỳ khó xác định tác động thực sự của X đối với Y hoặc tìm ra biến nào đang góp phần dự đoán biến phản hồi

Ngoài ra, sự hiện diện của các yếu tố dự đoán tương quan có xu hướng làm tăng các lỗi tiêu chuẩn. Với các sai số chuẩn lớn, khoảng tin cậy trở nên rộng hơn dẫn đến ước tính các tham số độ dốc kém chính xác hơn

Ngoài ra, khi các yếu tố dự đoán có tương quan, hệ số hồi quy ước tính của một biến tương quan phụ thuộc vào yếu tố dự đoán nào khác có sẵn trong mô hình. Nếu điều này xảy ra, chúng ta sẽ kết luận sai rằng một biến ảnh hưởng mạnh/yếu đến biến mục tiêu

Làm thế nào để kiểm tra đa cộng tuyến?

  • Sử dụng biểu đồ phân tán để trực quan hóa hiệu ứng tương quan giữa các biến
  • Use VIF factor. VIF value <= 4 suggests no multicollinearity whereas a value of >= 10 implies serious multicollinearity.
  • bảng tương quan

bước. để khắc phục vấn đề đa cộng tuyến, sử dụng ma trận tương quan để kiểm tra các biến tương quan. Giả sử các biến A và B có tương quan cao. Bây giờ, thay vì loại bỏ một trong số chúng, hãy sử dụng phương pháp này. Tìm mối tương quan trung bình của A và B với các biến còn lại. Biến nào có giá trị trung bình cao hơn so với các biến khác thì loại bỏ. Ngoài ra, chúng ta có thể sử dụng các phương pháp hồi quy bị phạt chẳng hạn như thòng lọng, sườn núi, lưới đàn hồi, v.v.

Các điều khoản lỗi phải không tương quan

Lỗi tại ∈t không được chỉ ra lỗi tại ∈t+1. Sự hiện diện của mối tương quan trong các thuật ngữ lỗi được gọi là Autocorrelation. Nó ảnh hưởng mạnh đến hệ số hồi quy và giá trị sai số chuẩn. Nó làm cho khoảng tin cậy và khoảng dự đoán hẹp hơn

Khoảng tin cậy hẹp hơn có nghĩa là khoảng tin cậy 95% sẽ có xác suất nhỏ hơn 0. 95 rằng nó sẽ chứa giá trị thực của các hệ số

Ngoài ra, các lỗi tiêu chuẩn thấp hơn sẽ khiến các giá trị p được liên kết thấp hơn thực tế. Điều này sẽ khiến chúng ta kết luận sai một thông số có ý nghĩa thống kê. Nó làm giảm đáng kể độ chính xác của mô hình. Điều này thường xảy ra trong các mô hình chuỗi thời gian trong đó thời điểm tiếp theo phụ thuộc vào thời điểm trước đó

Làm thế nào để kiểm tra tự tương quan?

  • Tìm thống kê Durbin – Watson (DW). Nó phải nằm giữa 0 và 4. Nếu DW = 2, ngụ ý không có tự tương quan, 0 < DW < 2 ngụ ý tự tương quan dương trong khi 2 < DW < 4 biểu thị tự tương quan âm
  • Tìm kiếm mô hình theo mùa hoặc tương quan trong các giá trị còn lại trong biểu đồ thời gian và thời gian còn lại

Biến phụ thuộc và số hạng sai số phải có phân phối chuẩn

Sự hiện diện của phân phối không bình thường cho thấy rằng có một số điểm dữ liệu bất thường phải được nghiên cứu kỹ lưỡng để tạo ra một mô hình tốt hơn

Sự hiện diện của các số hạng sai số không phân phối chuẩn dẫn đến khoảng tin cậy quá rộng hoặc quá hẹp. Mức độ tin cậy không ổn định dẫn đến khó ước tính các hệ số dựa trên việc tối thiểu hóa bình phương nhỏ nhất

Làm thế nào để kiểm tra phân phối bình thường?

  • Nhìn vào cốt truyện QQ bình thường
  • Thực hiện các bài kiểm tra thống kê về tính quy tắc như bài kiểm tra Kolmogorov-Smirnov, bài kiểm tra Shapiro-Wilk
Cốt truyện QQ bình thường

q-q hoặc quantile-quantile là biểu đồ phân tán giúp chúng tôi xác thực giả định về phân phối chuẩn. Nó sử dụng các giá trị tiêu chuẩn của phần dư để xác định phân phối lỗi bình thường. Lý tưởng nhất là biểu đồ này nên hiển thị một đường thẳng. Một đường cong, méo cho thấy phần dư có phân phối không bình thường

Vẽ đường hồi quy python

Hình ảnh cho âm mưu q-q

bước. để khắc phục sự cố nếu lỗi không được phân phối bình thường thông qua phép biến đổi phi tuyến tính của cả hai biến phản hồi hoặc biến dự đoán

Diễn giải phần dư so với cốt truyện đòn bẩy

Biểu đồ thặng dư so với đòn bẩy còn được gọi là biểu đồ Khoảng cách của Cook. Khoảng cách của Cook cố gắng xác định các điểm có ảnh hưởng nhiều hơn các điểm khác. Những điểm có ảnh hưởng như vậy có xu hướng tác động khá lớn đến đường hồi quy. Các giá trị lớn được đánh dấu bởi khoảng cách của Cook có thể cần điều tra thêm

Vẽ đường hồi quy python

Hình ảnh

bước. để giải quyết vấn đề đối với các quan sát có ảnh hưởng không có gì ngoài ngoại lệ là xóa các hàng đó. Ngoài ra, chúng ta có thể thu nhỏ quan sát ngoại lệ với giá trị lớn nhất trong dữ liệu hoặc coi các giá trị đó là giá trị bị thiếu. Việc coi các điểm dữ liệu là ngoại lệ đòi hỏi kiến ​​thức về miền tốt

Làm thế nào để biết liệu mô hình hồi quy có phù hợp nhất với dữ liệu của bạn hay không?

Các số liệu được sử dụng để xác định mức độ phù hợp của mô hình có thể có các giá trị khác nhau dựa trên loại dữ liệu. Do đó, chúng ta cần phải cực kỳ cẩn thận trong khi giải thích phân tích hồi quy

Sau đây là một số số liệu cùng với vẽ đường hồi quy trong python để đánh giá mô hình hồi quy của bạn

  1. Giá trị p rất quan trọng vì chúng ta chỉ có thể coi một mô hình có ý nghĩa thống kê khi Giá trị p nhỏ hơn mức ý nghĩa thống kê được xác định trước, lý tưởng là 0. 05. Trong hồi quy tuyến tính, Giả thuyết Null là các hệ số liên quan đến các biến bằng không. Giả thuyết thay thế là các hệ số không bằng 0 (i. e. tồn tại một mối quan hệ giữa biến độc lập được đề cập và biến phụ thuộc)
  2. giá trị t. ưu tiên(>. t. ) hoặc giá trị p là xác suất mà bạn nhận được giá trị t cao hoặc cao hơn giá trị được quan sát khi Giả thuyết không đúng là đúng. Nếu Pr(>. t. ) thấp, các hệ số có ý nghĩa (khác 0 đáng kể) và ngược lại

Điều quan trọng là mô hình phải có ý nghĩa thống kê trước khi chúng ta có thể tiếp tục và sử dụng nó để dự đoán biến phụ thuộc, nếu không, độ tin cậy của các giá trị dự đoán từ mô hình đó sẽ giảm và có thể được hiểu là một sự kiện ngẫu nhiên

  1. R Square (Hệ số xác định). giải thích tỷ lệ phương sai được giải thích bởi hiệp phương sai trong mô hình. Nó cho chúng ta biết tỷ lệ thay đổi của biến phụ thuộc (phản hồi) đã được mô hình giải thích. Nó nằm trong khoảng từ 0 đến 1. Thông thường, các giá trị cao hơn là mong muốn nhưng nó phụ thuộc vào chất lượng dữ liệu và tên miền. Chúng tôi không nhất thiết loại bỏ một mô hình dựa trên giá trị R-Squared thấp. Cách tốt hơn là xem xét AIC và độ chính xác dự đoán trên các mẫu xác thực khi quyết định tính hiệu quả của một mô hình
  2. R² đã điều chỉnh. xử phạt tổng giá trị cho số lượng yếu tố dự đoán trong mô hình. Nó không tăng, giữ nguyên hoặc giảm trừ khi biến mới được thêm vào thực sự hữu ích. Do đó, khi so sánh các mô hình lồng nhau, nên xem xét giá trị R² đã điều chỉnh trên R bình phương
  3. Thống kê F. là tỷ lệ giữa phương sai giải thích được của mô hình với phương sai không giải thích được. Nó so sánh mô hình đầy đủ với một phần chặn để đánh giá ý nghĩa tổng thể của mô hình. Giá trị của nó có thể nằm trong khoảng từ 0 đến bất kỳ số lớn tùy ý nào
  4. AIC và BIC. Tiêu chí thông tin của Akaike – AIC và tiêu chí thông tin Bayes – BIC là thước đo mức độ phù hợp của một mô hình thống kê ước tính và cũng có thể được sử dụng để lựa chọn mô hình. Cả hai tiêu chí đều phụ thuộc vào giá trị cực đại của hàm khả năng L đối với mô hình ước tính
  5. Cp của Mallow. được định nghĩa là một tiêu chí để đánh giá sự phù hợp khi các mô hình có số lượng tham số khác nhau được so sánh
  6. RMSE / MSE / MAE. là chỉ số lỗi quan trọng. MSE có nghĩa là lỗi bình phương. Nó khuếch đại tác động của các ngoại lệ đối với độ chính xác của mô hình. MAE có nghĩa là lỗi tuyệt đối. Nó mạnh mẽ chống lại tác động của các ngoại lệ. RMSE là lỗi bình phương trung bình gốc. Nó được hiểu là trung bình bao xa; . Nó vô hiệu hóa hiệu ứng bình phương của MSE theo căn bậc hai và cung cấp kết quả theo đơn vị gốc dưới dạng dữ liệu
  7. Độ chính xác tối thiểu. được định nghĩa là trung bình (tối thiểu (thực tế, dự đoán)/tối đa (thực tế, dự đoán)). Nó cho biết dự đoán của mô hình đã tắt bao xa. Đối với một mô hình hoàn hảo, biện pháp này là 1. 0. Thước đo càng thấp, mô hình càng tệ, dựa trên hiệu suất ngoài mẫu

THỐNG KÊ

TIÊU CHUẨN

R-SquaredCàng cao càng tốt (> 0. 70)Adj R-SquaredCàng cao càng tốtF-StatisticCàng cao càng tốtStd. Lỗi càng gần 0 thì thống kê càng tốt Nên lớn hơn 1. 96 cho giá trị p nhỏ hơn 0. 05AICCàng thấp càng tốtBICCàng thấp càng tốtMallows CpSẽ gần với số lượng yếu tố dự đoán trong mô hìnhMAECàng thấp càng tốtMSE (Sai ​​số bình phương trung bình)Càng thấp càng tốtĐộ chính xác tối thiểuCao hơn càng tốt

Vấn đề ví dụ về vẽ đường hồi quy trong Python

Hãy sử dụng kiến ​​thức lý thuyết của chúng tôi và tạo ra một mô hình thực tế. Chúng tôi cũng sẽ vẽ đường hồi quy trong python

Đối với phân tích này, chúng tôi sẽ sử dụng bộ dữ liệu kim cương. Bộ dữ liệu này có thể được tải xuống từ đây

Hãy tải tập dữ liệu và thực hiện phân tích dữ liệu ban đầu

import numpy as np 
import pandas as pd 
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

import warnings
%config InlineBackend.figure_format = 'png' #set 'png' here when working on notebook
warnings.filterwarnings('ignore') 

# Set some parameters to get good visuals - style to ggplot and size to 15,10
plt.style.use('ggplot')
plt.rcParams['figure.figsize'] = (4, 3)

#load the file and set the first column as the index
train = pd.read_csv(r"C:UserspiushDesktopDatasetAssignment 1diamonds.csv",index_col = 0)

train.head()

caratcắt màu sắc rõ nétđộ sâubảnggiáxyz10. 23lý tưởngESI261. 555. 03263. 953. 982. 4320. 21Cao cấpESI159. 861. 03263. 893. 842. 3130. 23TốtEVS156. 965. 03274. 054. 072. 3140. 29Cao cấpIVS262. 458. 03344. 204. 232. 6350. 31TốtJSI263. 358. 03354. 344. 352. 75

print ("nn---------------------")
print ("TRAIN SET INFORMATION")
print ("---------------------")
print ("Shape of training set:", train.shape, "n")
print ("Column Headers:", list(train.columns.values), "n")
print (train.dtypes)

---------------------
TRAIN SET INFORMATION
---------------------
Shape of training set: (53940, 10) 

Column Headers: ['carat', 'cut', 'color', 'clarity', 'depth', 'table', 'price', 'x', 'y', 'z'] 

carat      float64
cut         object
color       object
clarity     object
depth      float64
table      float64
price        int64
x          float64
y          float64
z          float64
dtype: object

Vì vậy, có 53940 quan sát và 10 biến khác nhau

Các loại biến khác nhau là. 'carat', 'cắt', 'màu', 'độ trong', 'độ sâu', 'bảng', 'giá', 'x', 'y', 'z'

import re
missing_values = []
nonumeric_values = []

print ("TRAINING SET INFORMATION")
print ("========================n")

for column in train:
    # Find all the unique feature values
    uniq = train[column].unique()
    print ("'{}' has {} unique values" .format(column,uniq.size))
    if (uniq.size > 10):
        print("~~Listing up to 10 unique values~~")
    print (uniq[0:10])
    print ("n-----------------------------------------------------------------------n")
    
    # Find features with missing values
    if (True in pd.isnull(uniq)):
        s = "{} has {} missing" .format(column, pd.isnull(train[column]).sum())
        missing_values.append(s)
    
    # Find features with non-numeric values
    for i in range (1, np.prod(uniq.shape)):
        if (re.match('nan', str(uniq[i]))):
            break
        if not (re.search('(^d+.?d*$)|(^d*.?d+$)', str(uniq[i]))):
            nonumeric_values.append(column)
            break
  
print ("n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n")
print ("Features with missing values:n{}nn" .format(missing_values))
print ("Features with non-numeric values:n{}" .format(nonumeric_values))
print ("n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n")

TRAINING SET INFORMATION
========================

'carat' has 273 unique values
~~Listing up to 10 unique values~~
[ 0.23  0.21  0.29  0.31  0.24  0.26  0.22  0.3   0.2   0.32]

-----------------------------------------------------------------------

'cut' has 5 unique values
['Ideal' 'Premium' 'Good' 'Very Good' 'Fair']

-----------------------------------------------------------------------

'color' has 7 unique values
['E' 'I' 'J' 'H' 'F' 'G' 'D']

-----------------------------------------------------------------------

'clarity' has 8 unique values
['SI2' 'SI1' 'VS1' 'VS2' 'VVS2' 'VVS1' 'I1' 'IF']

-----------------------------------------------------------------------

'depth' has 184 unique values
~~Listing up to 10 unique values~~
[ 61.5  59.8  56.9  62.4  63.3  62.8  62.3  61.9  65.1  59.4]

-----------------------------------------------------------------------

'table' has 127 unique values
~~Listing up to 10 unique values~~
[ 55.  61.  65.  58.  57.  56.  54.  62.  59.  63.]

-----------------------------------------------------------------------

'price' has 11602 unique values
~~Listing up to 10 unique values~~
[326 327 334 335 336 337 338 339 340 342]

-----------------------------------------------------------------------

'x' has 554 unique values
~~Listing up to 10 unique values~~
[ 3.95  3.89  4.05  4.2   4.34  3.94  4.07  3.87  4.    4.25]

-----------------------------------------------------------------------

'y' has 552 unique values
~~Listing up to 10 unique values~~
[ 3.98  3.84  4.07  4.23  4.35  3.96  4.11  3.78  4.05  4.28]

-----------------------------------------------------------------------

'z' has 375 unique values
~~Listing up to 10 unique values~~
[ 2.43  2.31  2.63  2.75  2.48  2.47  2.53  2.49  2.39  2.73]

-----------------------------------------------------------------------


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Features with missing values:
[]


Features with non-numeric values:
['cut', 'color', 'clarity']

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

# Check for duplicate index or rows
idsUnique = len(set(train.index))
idsTotal = train.shape[0]
idsDupli = idsTotal - idsUnique
print("There are " + str(idsDupli) + " duplicate IDs for " + str(idsTotal) + " total entries")

________số 8

Thống kê mô tả

#get summary of numerical variables
train.describe()

caratđộ sâubảngpricexyzcount53940. 00000053940. 00000053940. 00000053940. 00000053940. 00000053940. 00000053940. 000000mean0. 79794061. 74940557. 4571843932. 7997225. 7311575. 7345263. 538734std0. 4740111. 4326212. 2344913989. 4397381. 1217611. 1421350. 705699min0. 20000043. 00000043. 000000326. 0000000. 0000000. 0000000. 00000025%0. 40000061. 00000056. 000000950. 0000004. 7100004. 7200002. 91000050%0. 70000061. 80000057. 0000002401. 0000005. 7000005. 7100003. 53000075%1. 04000062. 50000059. 0000005324. 2500006. 5400006. 5400004. 040000max5. 01000079. 00000095. 00000018823. 00000010. 74000058. 90000031. 800000

Chúng ta có thể biết được độ lệch có thể có trong dữ liệu bằng cách so sánh giá trị trung bình với giá trị trung bình, tôi. e. con số 50%. Có vẻ như Giá bị lệch

#load the file and set the first column as the index
train = pd.read_csv(r"C:UserspiushDesktopDatasetAssignment 1diamonds.csv",index_col = 0)
0

#load the file and set the first column as the index
train = pd.read_csv(r"C:UserspiushDesktopDatasetAssignment 1diamonds.csv",index_col = 0)
1

#load the file and set the first column as the index
train = pd.read_csv(r"C:UserspiushDesktopDatasetAssignment 1diamonds.csv",index_col = 0)
2

#load the file and set the first column as the index
train = pd.read_csv(r"C:UserspiushDesktopDatasetAssignment 1diamonds.csv",index_col = 0)
3

Ta có 'x','y','z' là 0. hãy để chúng tôi kiểm tra xem có bao nhiêu và đối phó với các ngoại lệ

#load the file and set the first column as the index
train = pd.read_csv(r"C:UserspiushDesktopDatasetAssignment 1diamonds.csv",index_col = 0)
4

#load the file and set the first column as the index
train = pd.read_csv(r"C:UserspiushDesktopDatasetAssignment 1diamonds.csv",index_col = 0)
5

#load the file and set the first column as the index
train = pd.read_csv(r"C:UserspiushDesktopDatasetAssignment 1diamonds.csv",index_col = 0)
6

#load the file and set the first column as the index
train = pd.read_csv(r"C:UserspiushDesktopDatasetAssignment 1diamonds.csv",index_col = 0)
7

caraprice10. 2332620. 2132630. 2332740. 2933450. 31335

#load the file and set the first column as the index
train = pd.read_csv(r"C:UserspiushDesktopDatasetAssignment 1diamonds.csv",index_col = 0)
8

Chúng ta thấy ngay rằng trọng lượng carat bị lệch dương. hầu hết các viên kim cương đều có trọng lượng khoảng 1 carat hoặc thấp hơn nhưng có những trường hợp kim cương lớn hơn. Cốt truyện ở trên có các thùng khá rộng và dường như không có bất kỳ dữ liệu nào vượt quá kích thước 3 carat. 5

Chúng tôi có thể cố gắng khai thác thêm biểu đồ ngoài giờ bằng cách thêm một số đối số bổ sung để kiểm soát kích thước của các thùng và giới hạn của trục x

Boxplots

Boxplots là một loại biểu đồ đơn biến khác để tóm tắt các phân phối dữ liệu số bằng đồ họa. Hãy tạo một boxplot carat bằng cách sử dụng pd. hàm boxplot()

#load the file and set the first column as the index
train = pd.read_csv(r"C:UserspiushDesktopDatasetAssignment 1diamonds.csv",index_col = 0)
9

Hộp trung tâm của boxplot đại diện cho 50% quan sát ở giữa, thanh trung tâm là trung vị và các thanh ở cuối các đường chấm chấm (râu ria) gói gọn phần lớn các quan sát. Các vòng tròn nằm ngoài phần cuối của râu là các điểm dữ liệu có thể là ngoại lệ. Trong trường hợp này, tập dữ liệu của chúng tôi có hơn 50.000 quan sát và chúng tôi thấy nhiều điểm dữ liệu nằm ngoài râu trên cùng. Có lẽ chúng tôi sẽ không muốn phân loại tất cả những điểm đó là ngoại lệ, nhưng một số ít viên kim cương từ 4 cara trở lên chắc chắn vượt xa tiêu chuẩn

train.head()
0

Đây là phân phối đuôi dài, với mức độ tập trung cao của các quan sát dưới mốc 5.000 đô la Mỹ. Phân phối lệch phải với một lượng nhỏ giá rất lớn đẩy giá trị trung bình lên, trong khi giá trị trung bình vẫn là thước đo mạnh mẽ hơn về trung tâm phân phối

Chúng ta có thể thấy rằng dữ liệu cho thấy một số bằng chứng về tính hai chiều trên thang đo log10. Vì vậy, có hai loại kim cương khác nhau dành cho người mua giàu hơn và nghèo hơn

train.head()
1

train.head()
2

Đó là một mối quan hệ phi tuyến tính và độ phân tán (phương sai) của mối quan hệ này cũng tăng lên khi kích thước carat tăng lên. Mặc dù kích thước/trọng lượng của bộ kim cương là một yếu tố quan trọng, nhưng mối quan hệ này là phi tuyến tính. Do đó, chạy một mô hình tuyến tính sẽ là một ý tưởng tồi

Lô mật độ

Biểu đồ mật độ hiển thị phân phối của một biến số với một đường cong liên tục. Nó tương tự như biểu đồ nhưng không có các ngăn riêng biệt, biểu đồ mật độ cho hình ảnh rõ hơn về hình dạng cơ bản của phân phối. Tạo biểu đồ mật độ với chuỗi. cốt truyện(loại=”mật độ”)

train.head()
3

train.head()
4

train.head()
5

Biểu đồ trên cho thấy mối tương quan 92% giữa giá và carat. Tùy thuộc vào chúng ta nếu chúng ta nên coi % tương quan này là mức gây hại. Thông thường, tương quan trên 80% (chủ quan) được coi là cao hơn, do đó, chúng tôi sẽ không bỏ qua sự kết hợp này

Vẽ đường hồi quy trong Python – 1 biến phụ thuộc

train.head()
6

train.head()
7

  • đẹp. biến là tên của biến phản hồi
  • Không. của các quan sát cho thấy các quan sát hợp lệ
  • thống kê F là 3. 041e+05 và Prob(F-statistic rất nhỏ. Do đó chúng ta có thể bác bỏ giả thuyết khống. )
  • Ước lượng tham số. Đánh chặn và carat do đó
  • giá = -2256. 3606 + 7756. 4256 * ca-ra
  • p>. t. là giá trị Pearson cho các biến giải thích… khi 0. 000 tr < 0. 001
  • Giá trị bình phương R. tỷ lệ phương sai. chẳng hạn như 84. phương sai 9 % trong tập dữ liệu
  • Chặn – Đây là giá trị βo. Đó là dự đoán của mô hình khi tất cả các biến độc lập được đặt thành 0
  • Ước tính - Điều này đại diện cho các hệ số hồi quy cho các biến tương ứng. Đó là giá trị của độ dốc. Hãy diễn giải nó cho Chord_Length. Có thể nói, khi Chord_Length tăng lên 1 đơn vị, giữ các biến khác không đổi, Sound_pressure_level giảm đi một giá trị -35. 69
  • tiêu chuẩn. Lỗi - Điều này xác định mức độ biến thiên liên quan đến các ước tính. Sai số chuẩn của ước tính càng nhỏ thì dự đoán càng chính xác
  • giá trị t – thống kê t thường được sử dụng để xác định ý nghĩa của biến, i. e. nếu một biến đang bổ sung đáng kể thông tin vào mô hình. giá trị t > 2 cho thấy biến có ý nghĩa. Tôi đã sử dụng nó như một giá trị tùy chọn vì thông tin tương tự có thể được trích xuất từ ​​giá trị p
  • giá trị p - Đó là giá trị xác suất của các biến tương ứng xác định tầm quan trọng của chúng trong mô hình. giá trị p < 0. 05 luôn được mong muốn

train.head()
8

train.head()
9

Trong số tất cả, Dư vs. Giá trị được trang bị thu hút sự chú ý của chúng tôi. Mặc dù không chính xác, nhưng chúng tôi nhận thấy các dấu hiệu của phương sai thay đổi trong dữ liệu này

Nhớ hình dạng phễu? . Để khắc phục tình trạng này, chúng ta sẽ xây dựng một mô hình khác với log(y)

Vẽ đường hồi quy trong Python – Nhật ký của biến mục tiêu

print ("nn---------------------")
print ("TRAIN SET INFORMATION")
print ("---------------------")
print ("Shape of training set:", train.shape, "n")
print ("Column Headers:", list(train.columns.values), "n")
print (train.dtypes)
0

#load the file and set the first column as the index
train = pd.read_csv(r"C:UserspiushDesktopDatasetAssignment 1diamonds.csv",index_col = 0)
7

caratpricelog_pricelog_carat10. 233265. 7899600. 20701420. 213265. 7899600. 19062030. 233275. 7930140. 20701440. 293345. 8141310. 25464250. 313355. 8171110. 270027

print ("nn---------------------")
print ("TRAIN SET INFORMATION")
print ("---------------------")
print ("Shape of training set:", train.shape, "n")
print ("Column Headers:", list(train.columns.values), "n")
print (train.dtypes)
2

print ("nn---------------------")
print ("TRAIN SET INFORMATION")
print ("---------------------")
print ("Shape of training set:", train.shape, "n")
print ("Column Headers:", list(train.columns.values), "n")
print (train.dtypes)
3

print ("nn---------------------")
print ("TRAIN SET INFORMATION")
print ("---------------------")
print ("Shape of training set:", train.shape, "n")
print ("Column Headers:", list(train.columns.values), "n")
print (train.dtypes)
4

print ("nn---------------------")
print ("TRAIN SET INFORMATION")
print ("---------------------")
print ("Shape of training set:", train.shape, "n")
print ("Column Headers:", list(train.columns.values), "n")
print (train.dtypes)
5

Hàm residplot() có thể là một công cụ hữu ích để kiểm tra xem mô hình hồi quy đơn giản có phù hợp với tập dữ liệu hay không. Nó phù hợp và loại bỏ một hồi quy tuyến tính đơn giản và sau đó vẽ các giá trị còn lại cho mỗi quan sát. Lý tưởng nhất là các giá trị này nên nằm rải rác ngẫu nhiên xung quanh y = 0

Nếu có một cấu trúc trong phần dư, điều đó cho thấy hồi quy tuyến tính đơn giản là không phù hợp

Nhưng thật không may, điều này tạo ra một biểu đồ số dư so với các giá trị x. Tôi nghĩ rằng trong nhiều tình huống, biểu đồ này sẽ cho bạn biết điều tương tự như số dư so với giá trị phù hợp, nhưng đó không phải là thứ tôi đang tìm kiếm

Đây là cách tạo nó với vanilla matplotlib

print ("nn---------------------")
print ("TRAIN SET INFORMATION")
print ("---------------------")
print ("Shape of training set:", train.shape, "n")
print ("Column Headers:", list(train.columns.values), "n")
print (train.dtypes)
6

print ("nn---------------------")
print ("TRAIN SET INFORMATION")
print ("---------------------")
print ("Shape of training set:", train.shape, "n")
print ("Column Headers:", list(train.columns.values), "n")
print (train.dtypes)
7

ANOVA cho hồi quy tuyến tính

print ("nn---------------------")
print ("TRAIN SET INFORMATION")
print ("---------------------")
print ("Shape of training set:", train.shape, "n")
print ("Column Headers:", list(train.columns.values), "n")
print (train.dtypes)
8

dfsum_sqmean_sqFPR(>F)carat1. 046977. 56805146977. 568051298297. 1378560. 0Residual53938. 08494. 4699230. 157486NaNNaN

Đọc thêm

print ("nn---------------------")
print ("TRAIN SET INFORMATION")
print ("---------------------")
print ("Shape of training set:", train.shape, "n")
print ("Column Headers:", list(train.columns.values), "n")
print (train.dtypes)
9

---------------------
TRAIN SET INFORMATION
---------------------
Shape of training set: (53940, 10) 

Column Headers: ['carat', 'cut', 'color', 'clarity', 'depth', 'table', 'price', 'x', 'y', 'z'] 

carat      float64
cut         object
color       object
clarity     object
depth      float64
table      float64
price        int64
x          float64
y          float64
z          float64
dtype: object
0

Đầu tiên, người ta thường bắt gặp thuật ngữ “phân tích phương sai” khi công cụ dự đoán là phân loại, vì vậy bạn đang điều chỉnh mô hình y=α+βi y=α+βi trong đó ii xác định danh mục nào là giá trị của công cụ dự đoán. Nếu có kk hạng mục, bạn sẽ nhận được k−1k−1 bậc tự do ở tử số trong thống kê F và thường là n−kn−k bậc tự do ở mẫu số. Nhưng sự khác biệt giữa hồi quy và phân tích phương sai vẫn giống nhau đối với loại mô hình này

Chúng tôi có hai hình dạng đường hầm trong cốt truyện của chúng tôi

Vẽ đường hồi quy trong Python – Carat nhỏ hơn 0. 75

Dưới đây chúng tôi chọn những viên kim cương có giá trị dưới carat trung bình và xem liệu mẫu có tốt hơn một chút không

---------------------
TRAIN SET INFORMATION
---------------------
Shape of training set: (53940, 10) 

Column Headers: ['carat', 'cut', 'color', 'clarity', 'depth', 'table', 'price', 'x', 'y', 'z'] 

carat      float64
cut         object
color       object
clarity     object
depth      float64
table      float64
price        int64
x          float64
y          float64
z          float64
dtype: object
1

---------------------
TRAIN SET INFORMATION
---------------------
Shape of training set: (53940, 10) 

Column Headers: ['carat', 'cut', 'color', 'clarity', 'depth', 'table', 'price', 'x', 'y', 'z'] 

carat      float64
cut         object
color       object
clarity     object
depth      float64
table      float64
price        int64
x          float64
y          float64
z          float64
dtype: object
2

---------------------
TRAIN SET INFORMATION
---------------------
Shape of training set: (53940, 10) 

Column Headers: ['carat', 'cut', 'color', 'clarity', 'depth', 'table', 'price', 'x', 'y', 'z'] 

carat      float64
cut         object
color       object
clarity     object
depth      float64
table      float64
price        int64
x          float64
y          float64
z          float64
dtype: object
3

---------------------
TRAIN SET INFORMATION
---------------------
Shape of training set: (53940, 10) 

Column Headers: ['carat', 'cut', 'color', 'clarity', 'depth', 'table', 'price', 'x', 'y', 'z'] 

carat      float64
cut         object
color       object
clarity     object
depth      float64
table      float64
price        int64
x          float64
y          float64
z          float64
dtype: object
4

---------------------
TRAIN SET INFORMATION
---------------------
Shape of training set: (53940, 10) 

Column Headers: ['carat', 'cut', 'color', 'clarity', 'depth', 'table', 'price', 'x', 'y', 'z'] 

carat      float64
cut         object
color       object
clarity     object
depth      float64
table      float64
price        int64
x          float64
y          float64
z          float64
dtype: object
5

Phần kết luận

Chúng tôi đã tìm hiểu về các khái niệm về hồi quy tuyến tính và cách vẽ đồ thị của đường hồi quy trong python. Chúng tôi cũng đã triển khai mô hình bằng thư viện statsmodel

Hy vọng bạn thích ví dụ của chúng tôi và cũng đã thử mã hóa mô hình. Hãy cho tôi biết phản hồi của bạn trong phần bình luận bên dưới

Làm cách nào để vẽ sơ đồ dự đoán hồi quy trong Python?

Do đó, việc tạo mô hình hồi quy tuyến tính trong Statsmodels yêu cầu các bước sau. .
Nhập thư viện Statsmodels
Xác định ma trận Y và X. .
Thêm một cột không đổi vào ma trận X
Gọi OLS() để xác định mô hình
Gọi fit() để thực sự ước tính các tham số mô hình bằng cách sử dụng tập dữ liệu (vừa với dòng)
Hiển thị kết quả

Lệnh Python nào sẽ vẽ đường hồi quy?

Các hàm vẽ mô hình hồi quy tuyến tính . Các hàm này vẽ các biểu đồ tương tự, nhưng regplot() là hàm cấp trục và lmplot() là hàm cấp hình. regplot() and lmplot() . These functions draw similar plots, but regplot() is an axes-level function, and lmplot() is a figure-level function.