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

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 + ϵ

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

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 . 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.

Chủ Đề