Hướng dẫn python likelihood fit - trăn khả năng phù hợp

Một nhà khoa học dữ liệu tốt biết cách xử lý chính xác dữ liệu thô. Cô ấy/anh ấy không bao giờ đưa ra các giả định không phù hợp trong khi thực hiện phân tích dữ liệu hoặc mô hình học máy. Đây là một trong những bí mật mà một nhà khoa học dữ liệu thành công trong một cuộc đua. Chẳng hạn, thử nghiệm ANOVA bắt đầu với một giả định rằng dữ liệu thường được phân phối. Ước tính khả năng tối đa đưa ra giả định A-Priori về phân phối dữ liệu và cố gắng tìm ra các tham số có khả năng nhất. Điều gì sẽ xảy ra nếu các giả định về phân phối dữ liệu trong các trường hợp trên là không chính xác? Chúng tôi có thể đưa ra kết luận sai và tiến hành phân tích dữ liệu thêm hoặc mô hình học máy không đúng hướng. Với kết quả không mong muốn, chúng tôi có thể cố gắng tinh chỉnh các tham số siêu của mô hình để cải thiện hiệu suất, trong khi sai lầm là với giả định phân phối dữ liệu.

Một trong những phương pháp thống kê truyền thống, kiểm tra mức độ phù hợp, đưa ra một giải pháp để xác nhận các giả định lý thuyết của chúng tôi về phân phối dữ liệu. Bài viết này thảo luận về bài kiểm tra mức độ phù hợp với một số phân phối dữ liệu phổ biến bằng mã Python. Hãy để lặn sâu với các ví dụ.

Belamy

Đăng ký liều hàng tuần của bạn về những gì đang hoạt động trong công nghệ mới nổi.

Nhập các thư viện và mô -đun cần thiết để tạo môi trường Python.

 # create the environment
 import numpy as np
 import pandas as pd
 import matplotlib.pyplot as plt
 import seaborn as sns
 from scipy import stats  

Phân bố đồng đều

Chúng ta hãy giả sử chúng ta có xúc xắc trong tay. Một con xúc xắc có sáu khuôn mặt và sáu kết quả khác biệt có thể từ 1 đến 6 nếu chúng ta ném nó một lần. Một con xúc xắc không thiên vị có xác suất bằng nhau cho tất cả các kết quả có thể xảy ra. Để kiểm tra xem việc xúc xắc trong tay chúng tôi không thiên vị, chúng tôi đã ném chúng 90 lần (nhiều thử nghiệm hơn đảm bảo rằng kết quả có ý nghĩa thống kê) và lưu ý số lượng kết quả.

Cũng đọc

 path = 'https://raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv'
 dice = pd.read_csv(path)
 dice 

Output:

Vì mỗi mặt của xúc xắc được cho là có xác suất bằng nhau, nên kết quả phải được phân phối đồng đều. Do đó, chúng ta có thể thể hiện giả thuyết null ở mức ý nghĩa 5% như sau:

Dice không thiên vị và kết quả của nó theo phân phối đồng nhất

Sau một phân phối đồng nhất lý tưởng, các tần số dự kiến ​​có thể được lấy bằng cách đưa ra trọng số bằng nhau cho từng kết quả.

 # Total frequency
 total_freq = dice['observed'].sum()
 print('Total Frequency : ', total_freq)
 # Expected frequency
 expected_freq = total_freq / 6
 print('Expected Frequency : ', expected_freq) 

Output:

 # build up dataframe with expected frequency
 dice['expected'] = expected_freq
 dice 

Output:

Hãy để chúng tôi trực quan hóa phân phối dữ liệu.

 sns.set_style('darkgrid')
 plt.figure(figsize = (6,6))

 # plot observed frequency
 plt.subplot(211)
 plt.bar(dice['face'], dice['observed'])
 plt.ylabel('Observed Frequency')
 plt.ylim([0,20])
 # plot expected frequency

 plt.subplot(212)
 plt.bar(dice['face'], dice['expected'])
 plt.ylabel('Expected Frequency')
 plt.xlabel('Face of dice')
 plt.ylim([0,20])
 plt.show() 

Output:

Đó là thời điểm thích hợp để chúng tôi thảo luận về cách thức kiểm tra tốt của phù hợp. Trong điều kiện lý tưởng, tần số kết quả phải giống hệt với tần số dự kiến. Nhưng, tần số quan sát khác nhau một chút so với tần số dự kiến. Kiểm tra mức độ phù hợp đánh giá liệu biến thể này có được chấp nhận đáng kể hay không. Nói cách khác, nó kiểm tra xem dữ liệu quan sát được bao xa với phân phối dự kiến.

Sự gần gũi này trong phù hợp (độ phù hợp) được tính toán với một tham số gọi là chi bình phương. Về mặt toán học, nó được thể hiện là:

Nếu có nhiều sai lệch hơn giữa các tần số quan sát và dự kiến, giá trị của bình phương chi sẽ nhiều hơn. Nếu các tần số quan sát được khớp với các tần số dự kiến ​​chính xác, giá trị của nó sẽ bằng không. Do đó, một giá trị gần với 0 biểu thị sự gần gũi hơn trong sự phù hợp.

Chúng ta có thể xác định hàm trợ giúp để tính giá trị chi bình phương.

 # a helper function to calculate the Chi-Square value
 def Chi_Square(obs_freq, exp_freq):
   count = len(obs_freq)
   chi_sq = 0
   for i in count:
     x = (obs_freq[i] - exp_freq[i]) ** 2
     x = x / exp_freq[i]
     chi_sq += x
   return chi_sq 

Giá trị chi bình phương cho ví dụ của chúng tôi được tính như sau.

 # calculate using the helper function
 Chi_Square(dice['observed'], dice['expected']) 

Output:

Cần lưu ý rằng mô -đun SCIPY từ

 path = 'https://raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv'
 dice = pd.read_csv(path)
 dice 
8 có thể tính toán giống như dưới đây.

 # calculate using the stats module of SciPy library
 stats.chisquare(dice['observed'], dice['expected']) 

Output:

Để kết luận giả thuyết null, chúng ta phải so sánh giá trị chi bình phương tính toán với giá trị chi bình phương quan trọng. Giá trị chi bình phương quan trọng có thể được tính toán bằng mô-đun thống kê SCIPY. Nó lấy như những lập luận (1-mức độ quan trọng, mức độ tự do). Mức độ tự do cho chi bình phương được tính là:

DOF = Number of outcomes - p - 1

Ở đây, P đề cập đến số lượng tham số mà phân phối có. Cho phân phối đồng nhất, p = 0; cho phân phối Poisson, p = 1; Đối với phân phối bình thường, p = 2.

Giá trị chi bình phương quan trọng được xác định bằng cách sử dụng mã,

 # critical Chi-Square - percent point function
 p = 0
 DOF = len(dice['observed']) - p - 1
 stats.chi2.ppf(0.95, DOF) 

Output:

Nếu giá trị chi bình phương tính toán nhiều hơn hoặc bằng giá trị tới hạn, giả thuyết null nên bị từ chối. Mặt khác, nếu giá trị chi bình phương tính toán nhỏ hơn giá trị tới hạn, thì giả thuyết null không nên bị từ chối.

Ở đây, đối với vấn đề của chúng tôi, giá trị tính toán là 2.8 ít hơn nhiều so với giá trị tới hạn là 11,07. Do đó, chúng ta không thể bác bỏ giả thuyết null, tức là, phân phối quan sát được tuân theo đáng kể phân phối đồng nhất.

Một điều kiện quan trọng được áp đặt bởi bài kiểm tra mức độ phù hợp là tần số dự kiến ​​của bất kỳ kết quả nào phải nhiều hơn hoặc bằng 5. Nếu bất kỳ kết quả nào có tần số dự kiến ​​nhỏ hơn 5, nó nên được kết hợp (thêm vào) với Kết quả để có ý nghĩa trong tần số.

Phân phối bình thường

Một nhà sản xuất bóng đèn muốn biết liệu cuộc sống của bóng đèn có theo phân phối bình thường hay không. Bốn mươi bóng đèn được lấy mẫu ngẫu nhiên, và cuộc sống của chúng, trong nhiều tháng, được quan sát.

 path = 'https://raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv'
 dice = pd.read_csv(path)
 dice 
0

Output:

Chúng ta có thể trực quan hóa dữ liệu bằng phương pháp Seaborn từ

 path = 'https://raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv'
 dice = pd.read_csv(path)
 dice 
9.

 path = 'https://raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv'
 dice = pd.read_csv(path)
 dice 
1

Output:

Dữ liệu không thể được đảm bảo, với đôi mắt trần, thường được phân phối. Chúng tôi biết rằng một biến ngẫu nhiên theo phân phối bình thường là liên tục. Do đó, chúng ta có thể dễ dàng xác định các khoảng bin sao cho mỗi thùng nên có ít nhất năm là tần số dự kiến. Ở đây, trong vấn đề của chúng tôi có 40 bóng đèn mẫu. Để có năm mẫu dự kiến ​​trong mỗi thùng, chúng ta nên có tổng cộng 40/5 = 8 thùng.

Tìm khoảng thời gian thùng có năm tần số dự kiến ​​cho mỗi thùng.

 path = 'https://raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv'
 dice = pd.read_csv(path)
 dice 
2

Output:

Sự phân phối dao động từ vô cùng tiêu cực đến vô cùng dương tính. Bao gồm vô cùng tiêu cực trong danh sách trên.

 path = 'https://raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv'
 dice = pd.read_csv(path)
 dice 
3

Output:

Để tính toán tần số quan sát được, chúng ta chỉ có thể đếm số lượng kết quả trong các khoảng thời gian này. Đầu tiên, tạo một khung dữ liệu với 8 khoảng thời gian như dưới đây.

 path = 'https://raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv'
 dice = pd.read_csv(path)
 dice 
4

Output:

Tạo hai cột mỗi cho tần số quan sát và dự kiến. Sử dụng phương pháp PANDAS, ____ ____20 để tính toán tần số quan sát giữa các khoảng.

 path = 'https://raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv'
 dice = pd.read_csv(path)
 dice 
5

Output:

Bây giờ chúng tôi đã sẵn sàng để thực hiện bài kiểm tra tốt cho phù hợp. Chúng ta có thể nêu giả thuyết null của chúng ta ở mức ý nghĩa 5% như:

Cuộc sống bóng đèn theo phân phối bình thường.

Tính toán giá trị chi bình phương thực tế bằng phương pháp

 # Total frequency
 total_freq = dice['observed'].sum()
 print('Total Frequency : ', total_freq)
 # Expected frequency
 expected_freq = total_freq / 6
 print('Expected Frequency : ', expected_freq) 
1 có sẵn trong mô-đun SCIPY.

 path = 'https://raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv'
 dice = pd.read_csv(path)
 dice 
6

Output:

Tính giá trị chi bình phương quan trọng bằng phương pháp

 # Total frequency
 total_freq = dice['observed'].sum()
 print('Total Frequency : ', total_freq)
 # Expected frequency
 expected_freq = total_freq / 6
 print('Expected Frequency : ', expected_freq) 
3 có sẵn trong mô-đun SCIPY.

 path = 'https://raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv'
 dice = pd.read_csv(path)
 dice 
7

Output:

Nó được quan sát thấy rằng giá trị chi bình phương được tính toán 6.4 nhỏ hơn giá trị tới hạn 11,07. Do đó, giả thuyết null không thể bị từ chối. Nói cách khác, tuổi thọ của bóng đèn thường được phân phối.

Tìm máy tính xách tay colab với việc triển khai mã trên ở đây.

Tìm các bộ dữ liệu CSV được sử dụng ở đây ở đây. & NBSP;

Gói lên

Bài kiểm tra mức độ phù hợp là một cách tiếp cận tiện dụng để đưa ra quyết định thống kê về phân phối dữ liệu. Nó có thể được áp dụng cho bất kỳ loại phân phối và biến ngẫu nhiên (dù liên tục hay rời rạc). Bài viết này đã thảo luận về hai ví dụ thực tế từ hai phân phối khác nhau. Trong những trường hợp đó, phân phối giả định trở thành đúng theo bài kiểm tra mức độ phù hợp. Trong trường hợp thất bại của giả định, giả định về phân phối nên được thay đổi phù hợp và được tiến hành lại với bài kiểm tra mức độ phù hợp. & NBSP;

Đến lượt bạn tìm sự phân phối thực sự của dữ liệu của bạn!

References:

  1. Xác suất và thống kê cho các kỹ sư và nhà khoa học
  2. Mô -đun SCIPY SCIPY - Tài liệu chính thức
  3. Đọc trên Wikipedia
  4. Xem trên YouTube