Kiểm định t
Thuộc phần Thống kê cho machine learning trong hành trình Machine Learning của Coddy. Bài học 45 trên 64.
Trước khi có máy tính, thống kê có một cách làm nhanh: kiểm định t (t-test). Một công thức tính ngay giá trị p từ các giá trị trung bình, độ phân tán và kích thước nhóm:
from scipy import stats
result = stats.ttest_ind(sans, serif)
print(np.round(result.pvalue, 3))
print(np.round(result.statistic, 2))Với nghiên cứu về phông chữ, đoạn này in ra 0.031 và -2.61. 1000 lần xáo trộn cho kết quả 0.039, gần như thường lệ.
Giá trị t là khoảng cách tính theo sai số chuẩn; dấu của nó chỉ cho biết nhóm nào đứng trước. Công thức này giả định dữ liệu có dạng hình chuông, vì vậy với các nhóm nhỏ có dữ liệu lệch, hãy tin vào kết quả xáo trộn.
Nó cũng kiểm tra xem một mô hình có thực sự vượt trội hơn mô hình khác hay không.
Thử thách
Trung bìnhMột nhà sản xuất sơn đo thời gian khô của ba loại lớp phủ. Phần code có sẵn lưu số phút khô của từng loại trong times, liệt kê ba pairs, định nghĩa permutation_p(a, b) và đọc level.
- In giá trị p (p-value) của kiểm định t cho matte và satin cạnh giá trị p từ phép xáo trộn.
- Kiểm tra từng cặp theo thứ tự loại lớp phủ xuất hiện trước, rồi in cặp có giá trị p nhỏ nhất.
- Đếm số cặp có giá trị nhỏ hơn
level.
Làm tròn giá trị p đến 3 chữ số thập phân. Một nhà sản xuất khác, với mức 0.05:
matte vs satin: t-test 0.012, simulation 0.023
Clearest difference: satin vs gloss (p = 0.0)
Pairs that differ: 3 of 3Tự làm thử
import numpy as np
import pandas as pd
from scipy import stats
# Kiểm định hoán vị trong hai bài học trước: trả về giá trị p khi so sánh a với b
def permutation_p(a, b, shuffles=1000, seed=0):
rng = np.random.default_rng(seed)
pooled = np.concatenate([a, b])
diffs = []
for i in range(shuffles):
shuffled = rng.permutation(pooled)
diffs.append(shuffled[len(a):].mean() - shuffled[:len(a)].mean())
real = b.mean() - a.mean()
return (np.abs(np.array(diffs)) >= np.abs(real)).mean()
paint = pd.read_csv("paint.csv")
times = {
"matte": paint[paint["finish"] == "matte"]["minutes"],
"satin": paint[paint["finish"] == "satin"]["minutes"],
"gloss": paint[paint["finish"] == "gloss"]["minutes"],
}
pairs = [("matte", "satin"), ("matte", "gloss"), ("satin", "gloss")]
level = float(input())
# Viết code bên dưới
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Thống kê cho machine learning
1Giá trị trung tâm và độ phân tán
Giá trị trung bình và trung vịPhân vị và tứ phân vịPhương sai và độ lệch chuẩnMẫu hay tổng thể?Giá trị xuất hiện nhiều nhấtÔn tập: Thời gian giao hàng4Mẫu và tổng thể
Tổng thể và mẫuTrung bình mẫu biến thiênPhân phối mẫuMẫu lớn hơn, ít nhiễu hơnÔn tập: khảo sát một thị trấn2Các phân phối
Biểu đồ tần suất mật độHình dạng của dữ liệuĐường cong chuẩnQuy tắc 68-95-99,7Điểm ZÔn tập: Thời lượng pin3Xác suất qua mô phỏng
Xác suất dưới dạng tần suấtLuật số lớnTổng điểm khi gieo xúc xắcGiá trị kỳ vọngXác suất có điều kiệnÔn tập: Tỷ lệ thắng ở quầy xúc xắc6Mối quan hệ
Đọc biểu đồ phân tánTương quanMa trận tương quanBản đồ nhiệt tương quanTương quan không đồng nghĩa với quan hệ nhân quảÔn tập: Kem và mặt trờiTự luyện tập: Trình biên dịch Python online