Thử nghiệm Goodness-of-Fit, một phương pháp thống kê truyền thống, đưa ra giải pháp để xác thực các giả định lý thuyết của chúng tôi về phân phối dữ liệu
- Bởi Rajkumar Lakshmanamoorthy
Một nhà khoa học dữ liệu giỏi biết cách xử lý dữ liệu thô một cách chính xác. Cô ấy/anh ấy không bao giờ đưa ra những giả định không phù hợp trong khi thực hiện phân tích dữ liệu hoặc lập mô hình máy học. Đây là một trong những bí mật giúp Nhà khoa học dữ liệu thành công trong cuộc đua. Chẳng hạn, phép thử ANOVA bắt đầu với giả định rằng dữ liệu được phân phối bình thường. Ước tính khả năng tối đa đưa ra giả định tiên nghiệm về phân phối dữ liệu và cố gắng tìm ra các tham số có khả năng xảy ra 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? . Với kết quả không mong muốn, chúng tôi có thể cố gắng tinh chỉnh các siêu tham số của mô hình để cải thiện hiệu suất, trong khi sai lầm là do 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, bài kiểm tra Mức độ phù hợp, đưa ra giải pháp để xác thực 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ề thử nghiệm Goodness-of-Fit với một số phân phối dữ liệu phổ biến bằng mã Python. Hãy đi sâu vào các ví dụ
Nhập các thư viện và mô-đun cần thiết để tạo môi trường Python
TUYỆT VỜI
Đăng ký hàng tuần của bạn về những gì đang xảy ra trong công nghệ mới nổi
Đăng ký
Phân bố đồng đều
Giả sử chúng ta có xúc xắc trong tay. Một con xúc xắc có sáu mặt và sáu kết quả khác nhau có thể xảy ra từ 1 đến 6 nếu chúng ta tung 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ên xúc xắc trong tay của chúng ta có thiên vị hay không, chúng ta tung 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à ghi lại số lượng kết quả
path = '//raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv' dice = pd.read_csv(path) diceđầu ra
Tải xuống ứng dụng di động của chúng tôi
Vì mỗi mặt của xúc xắc được giả định là có xác suất bằng nhau, nên các kết quả phải được phân phối đồng đều. Do đó, chúng ta có thể diễn đạt giả thuyết khống ở mức ý nghĩa 5% như sau
Xúc xắc không thiên vị và kết quả của nó tuân theo phân phối đồng đều
Theo phân phối đồng đều lý tưởng, tần số dự kiến có thể được suy ra bằng cách đặt 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)đầu ra
đầu ra
Hãy để chúng tôi trực quan hóa việc 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()đầu ra
Đây là thời điểm thích hợp để chúng ta thảo luận về cách thức hoạt động của bài kiểm tra Mức độ phù hợp. Trong điều kiện lý tưởng, tần suất của kết quả phải giống với tần suất dự kiến. Tuy nhiên, tần suất quan sát được khác một chút so với tần suất dự kiến. Thử nghiệm Goodness-of-Fit đánh giá liệu biến thể này có đáng kể được chấp nhận hay không. Nói cách khác, nó kiểm tra mức độ phù hợp của dữ liệu được quan sát với phân phối dự kiến
Mức độ vừa khít (goodness-of-fit) này được tính bằng một tham số gọi là Chi-Square. Về mặt toán học, nó được thể hiện như
Nếu có nhiều độ lệch giữa tần số quan sát được và tần số mong đợi, thì giá trị của Chi-Square sẽ lớn hơn. Nếu tần số được quan sát khớp chính xác với tần số dự kiến, giá trị của nó sẽ bằng không. do đó, một giá trị gần bằng 0 biểu thị sự gần gũi hơn trong sự phù hợp
Chúng ta có thể định nghĩa hàm trợ giúp để tính giá trị Chi-Square
# 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_sqGiá trị Chi-Square 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'])đầu ra
Cần lưu ý rằng mô-đun path = '//raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv' dice = pd.read_csv(path) dice 8 của SciPy có thể tính toán giống như bên dưới
________số 8_______đầu ra
Để kết luận giả thuyết không, chúng ta phải so sánh giá trị Chi-Square được tính toán với giá trị Chi-Square tới hạn. Giá trị Chi-Square quan trọng có thể được tính bằng mô-đun thống kê của SciPy. Nó nhận làm đối số (1 – mức ý nghĩa, bậc tự do). Bậc tự do cho Chi-Square được tính như sau
DOF = Number of outcomes - p - 1Ở đây, p đề cập đến số lượng tham số mà phân phối có. Để phân phối đồng đều, p=0;
Giá trị Chi-Square tới hạn đượ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)đầu ra
Nếu giá trị Chi-Square được tính toán lớn hơn hoặc bằng giá trị tới hạn, giả thuyết khống sẽ bị bác bỏ. Mặt khác, nếu giá trị Chi-Square được tính toán nhỏ hơn giá trị tới hạn, thì không nên bác bỏ giả thuyết không
Ở đây, đối với vấn đề của chúng tôi, giá trị tính toán của 2. 8 nhỏ hơn nhiều so với giá trị tới hạn của 11. 07. Do đó, chúng ta không thể bác bỏ giả thuyết không, tôi. e. , phân phối được quan sát đáng kể tuân theo phân phối đồng đều
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 suất dự kiến của bất kỳ kết quả nào phải lớn hơn hoặc bằng 5. Nếu bất kỳ kết quả nào có tần suất kỳ vọng nhỏ hơn 5, kết quả đó phải được kết hợp (thêm) với kết quả liền kề để có ý nghĩa về tần suất
Phân phối bình thường
Một nhà sản xuất bóng đèn muốn biết liệu tuổi thọ của bóng đèn có tuân theo phân phối chuẩn hay không. Bốn mươi bóng đèn được lấy mẫu ngẫu nhiên và tuổi thọ của chúng tính bằng tháng được quan sát
path = '//raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv' dice = pd.read_csv(path) dice 0đầu ra
Chúng ta có thể trực quan hóa dữ liệu bằng phương pháp path = '//raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv' dice = pd.read_csv(path) dice 9 của Seaborn
path = '//raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv' dice = pd.read_csv(path) dice 1đầu ra
Dữ liệu không thể được đảm bảo, bằng mắt thường, được phân phối bình thường. Ta biết rằng biến ngẫu nhiên tuân theo phân phối chuẩn thì liên tục. Do đó, chúng ta có thể dễ dàng xác định các khoảng thời gian ngăn sao cho mỗi ngăn phải có ít nhất năm tần suất mong đợi của nó. Ở đây, trong bài toán của chúng ta có 40 bóng đèn mẫu. Để có năm mẫu dự kiến trong mỗi thùng, chúng ta phải có chính xác 40/5 = 8 thùng trong tổng số
Tìm khoảng thời gian bin để có năm tần suất dự kiến trên mỗi bin
path = '//raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv' dice = pd.read_csv(path) dice 2đầu ra
Phạm vi phân phối từ vô cực âm đến vô cực dương. Bao gồm vô cực âm trong danh sách trên
path = '//raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv' dice = pd.read_csv(path) dice 3đầu ra
Để tính tần suất quan sát, chúng ta chỉ cần đếm số 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ư bên dưới
path = '//raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv' dice = pd.read_csv(path) dice 4đầu ra
Tạo hai cột cho tần suất quan sát và dự kiến. Sử dụ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) 0 của Pandas để tính tần suất quan sát được giữa các khoảng thời gian
path = '//raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv' dice = pd.read_csv(path) dice 5đầu ra
Bây giờ chúng tôi đã sẵn sàng để thực hiện bài kiểm tra Goodness-of-Fit. Chúng ta có thể nêu giả thuyết khống của mình với mức ý nghĩa 5% là
Tuổi thọ của bóng đèn tuân theo phân phối chuẩn
Tính giá trị Chi-Square thực tế bằng cách sử dụ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 path = '//raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv' dice = pd.read_csv(path) dice 8 của SciPy
path = '//raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv' dice = pd.read_csv(path) dice 6đầu ra
Tính giá trị Chi-Square tới hạn bằng cách sử dụ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 path = '//raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv' dice = pd.read_csv(path) dice 8 của SciPy
path = '//raw.githubusercontent.com/RajkumarGalaxy/dataset/master/Tabular/uniform_dice.csv' dice = pd.read_csv(path) dice 7đầu ra
Người ta quan sát thấy rằng giá trị Chi-Square được tính 6. 4 nhỏ hơn giá trị tới hạn 11. 07. Do đó, giả thuyết không thể bị bác bỏ. Nói cách khác, tuổi thọ của bóng đèn có phân phối chuẩn
Tìm Colab Notebook có triển khai mã ở trên tại đây
Tìm bộ dữ liệu CSV được sử dụng ở trên tại đây.
kết thúc
Kiểm tra mức độ phù hợp là một cách tiếp cận hữu ích để đư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 nào (dù là 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 bản 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 giả định không thành công, giả định về phân phối cần được thay đổi cho phù hợp và thực hiện lại bằng kiểm định Mức độ phù hợp.
Đến lượt bạn tìm phân phối thực sự của dữ liệu của bạn
Người giới thiệu
- Xác suất và Thống kê cho Kỹ sư và Nhà khoa học
- Mô-đun thống kê của SciPy – Tài liệu chính thức
- Đọc trên Wikipedia
- Xem trên YouTube
Nhiều câu chuyện AIM tuyệt vời hơn
Web3, Metaverse Not Dead, Chủ đề trung tâm được chụp tại CES23
Điểm nổi bật của Ngân sách Liên minh năm 2023. Từ 'Sản xuất ở Ấn Độ' đến 'Sản xuất AI ở Ấn Độ'
'Chú ý là tất cả những gì bạn cần' Không được chú ý
Đằng sau hậu trường. Swiggy đói để làm gì?
TypeScript so với JavaScript. Ai là người chiến thắng trong trận chiến kéo dài 10 năm?
Một người đam mê Học máy với bằng Thạc sĩ Kỹ thuật và đam mê viết và khám phá những điều mới. Thích đọc tiểu thuyết, nấu ăn, tập võ và thỉnh thoảng viết tiểu thuyết và thơ
Sự kiện sắp tới của AIM
Early Bird Pass hết hạn vào ngày 3 tháng 2
Hội nghị, trực tiếp (Bangalore)
Tăng 2023. Phụ nữ trong hội nghị công nghệ
16-17 tháng 3 năm 2023
Đăng ký
Hội nghị, trực tiếp (Bangalore)
Hội nghị thượng đỉnh về kỹ thuật dữ liệu (DES) 2023
27-28 tháng 4 năm 2023
Đăng ký
3 cách để tham gia cộng đồng của chúng tôi
nhóm điện tín
Khám phá các ưu đãi đặc biệt, tin bài hàng đầu, sự kiện sắp tới, v.v.
Tham gia Telegram
Máy chủ bất hòa
Luôn kết nối với hệ sinh thái lớn hơn về khoa học dữ liệu và ML Professionals
Tham gia cộng đồng Discord
Theo dõi bản tin hàng ngày của chúng tôi
Nhận những câu chuyện và video tuyệt vời hàng ngày của chúng tôi trong hộp thư đến của bạn
Đặt mua
NHỮNG CÂU CHUYỆN HÀNG ĐẦU
Bắt đầu sự nghiệp của bạn trong Khoa học dữ liệu và Phân tích kinh doanh với chương trình này từ Great Learning
Chương trình giảng dạy của PGP về Khoa học dữ liệu và Phân tích kinh doanh. V. 22 đã được cập nhật với sự tư vấn của các chuyên gia trong ngành, các học giả và cựu sinh viên của chương trình
Làm cách nào để xây dựng các mô hình dự đoán chăm sóc sức khỏe bằng PyHealth?
PyHealth là hộp công cụ dựa trên Python. Đúng như tên gọi, hộp công cụ này chứa nhiều mô hình ML và thuật toán kiến trúc để làm việc với dữ liệu y tế và lập mô hình
Giải thích. Triển vọng học tập trong AI
Một bài báo xuất bản đầu năm nay lập luận rằng học hồi tưởng không phải là một đại diện tốt cho trí thông minh thực sự
AI trong SEO hiện đã phát triển đến mức nó đang tự chống lại chính mình
Với việc tích hợp AI vào SEO, liệu các thương hiệu có thể vượt qua các nguyên tắc nghiêm ngặt và luôn thận trọng của SERPs không?
bài hội đồng. Những điều quan trọng cần nhớ khi xây dựng nhóm dữ liệu
Nhóm AI bao gồm 'một nhóm bên ngoài' (một nhóm bên ngoài nhóm dữ liệu nhưng là một phần của nhóm AI cốt lõi) làm việc chặt chẽ với nhóm dữ liệu và sau đó là chính nhóm dữ liệu cốt lõi
IBM ra mắt mẫu Mainframe mới, nhằm lấy lại vị thế đã mất
Mặc dù có các lợi ích về tiết kiệm chi phí và dễ dàng chia sẻ tài nguyên, nhưng chỉ có 25% khối lượng công việc của doanh nghiệp được chuyển lên đám mây
AI được sử dụng như thế nào để phát hiện sớm ung thư vú
CNN hiệu quả trong việc phát hiện các khối u ác tính từ các bản quét
Google nói không với FLoC, thay bằng Topic
Chủ đề là một đề xuất Hộp cát bảo mật dành cho quảng cáo dựa trên internet, thay thế cho FLoC (Học tập theo nhóm có liên kết)
Học Scala 101. Những cuốn sách, video và khóa học hay nhất
Được gắn thẻ là “cuốn sách dứt khoát về Scala”, cuốn sách này được đồng tác giả bởi Martin Odersky, nhà thiết kế ngôn ngữ Scala