Trong hai bài viết trước, tôi đã nói về cách đo lường mối tương quan giữa các cột khác nhau trong tập dữ liệu của bạn và cách phát hiện đa cộng tuyến giữa chúng
Thống kê trong Python - Hiểu về Phương sai, Hiệp phương sai và Tương quan
Hiểu mối quan hệ giữa dữ liệu của bạn và biết sự khác biệt giữa Hệ số tương quan Pearson và…
hướng tới khoa học dữ liệu. com
Thống kê trong Python - Collinearity và Multicollinearity
Hiểu cách phát hiện đa cộng tuyến trong tập dữ liệu của bạn
hướng tới khoa học dữ liệu. com
Tuy nhiên, những kỹ thuật này rất hữu ích khi các biến mà bạn đang cố gắng so sánh là liên tục. Làm thế nào để bạn so sánh chúng nếu các biến của bạn là phân loại? . e. tương quan]. Chúng tôi sẽ sử dụng phép kiểm tra thống kê được gọi là chi-square [thường được viết là χ2]
Trước khi chúng ta bắt đầu thảo luận về chi-square, đây là tóm tắt nhanh về các phương pháp kiểm tra có thể được sử dụng để kiểm tra các loại biến khác nhau
Sử dụng thống kê chi-square để xác định xem hai biến phân loại có tương quan với nhau không
Thống kê chi-square [χ2] là một cách để kiểm tra mối quan hệ giữa hai biến danh nghĩa phân loại
Các biến danh nghĩa chứa các giá trị không có thứ tự nội tại. Ví dụ về các biến danh nghĩa là giới tính, chủng tộc, màu mắt, màu da, v.v. Mặt khác, các biến thứ tự chứa các giá trị có thứ tự. Ví dụ về các biến thứ tự là lớp, trình độ học vấn, tình trạng kinh tế, v.v.
Ý tưởng chính đằng sau phép thử chi-square là so sánh các giá trị quan sát được trong dữ liệu của bạn với các giá trị mong đợi và xem liệu chúng có liên quan với nhau hay không. Đặc biệt, đây là một cách hữu ích để kiểm tra xem hai biến danh nghĩa phân loại có tương quan với nhau hay không. Điều này đặc biệt quan trọng trong học máy khi bạn chỉ muốn các tính năng tương quan với mục tiêu được sử dụng để đào tạo
Có hai loại kiểm định chi-square
- Chi-Square Goodness of Fit Test - kiểm tra xem một biến có khả năng đến từ một phân phối nhất định hay không
- Kiểm tra độc lập Chi-Square - kiểm tra xem hai biến có tương quan với nhau hay không
Kiểm tra https. //www. vân vân. com/en_us/statistics-knowledge-portal/chi-square-test. html để thảo luận chi tiết hơn về hai bài kiểm tra chi bình phương ở trên
Khi so sánh để xem hai biến phân loại có tương quan với nhau hay không, bạn sẽ sử dụng Kiểm định độc lập Chi-Square
Các bước để thực hiện kiểm tra Chi-SquareĐể sử dụng kiểm định chi-square, bạn cần thực hiện các bước sau
- Xác định giả thuyết vô hiệu của bạn và giả thuyết thay thế. họ đang
- H₀ [Giả thuyết không có giá trị] - rằng 2 biến phân loại được so sánh là độc lập với nhau
- H₁ [Giả thuyết thay thế] - rằng 2 biến phân loại được so sánh phụ thuộc vào nhau
2. Xác định giá trị α. Đây là rủi ro mà bạn sẵn sàng chấp nhận khi đưa ra kết luận sai. Ví dụ: giả sử bạn đặt α=0. 05 khi kiểm tra tính độc lập. Điều này có nghĩa là bạn đang chấp nhận rủi ro 5% khi kết luận rằng hai biến là độc lập trong khi thực tế chúng không phải như vậy.
3. Tính điểm chi-square bằng cách sử dụng hai biến phân loại và sử dụng nó để tính giá trị p. Giá trị p thấp có nghĩa là có mối tương quan cao giữa hai biến phân loại của bạn [chúng phụ thuộc lẫn nhau]. Giá trị p được tính từ điểm chi bình phương. Giá trị p sẽ cho bạn biết liệu kết quả kiểm tra của bạn có đáng kể hay không
Trong phân tích chi-square, giá trị p là xác suất thu được chi-square lớn hơn hoặc lớn hơn so với trong thử nghiệm hiện tại và dữ liệu vẫn sẽ hỗ trợ cho giả thuyết. Đó là xác suất xảy ra sai lệch so với những gì được mong đợi chỉ do ngẫu nhiên. Nói chung giá trị p bằng 0. 05 hoặc lớn hơn được coi là tới hạn, bất kỳ giá trị nào thấp hơn có nghĩa là độ lệch là đáng kể và giả thuyết đang được kiểm tra phải bị bác bỏ
Nguồn. https. //passel2. unl. edu/xem/bài học/9beaa382bf7e/8
Để tính giá trị p, bạn cần hai thông tin
- Bậc tự do - số loại trừ 1
- điểm Chi bình phương
Nếu giá trị p thu được là
- < 0. 05 [giá trị α bạn đã chọn], bạn từ chối H₀ [Giả thuyết không] và chấp nhận H₁ [Giả thuyết thay thế]. Điều này có nghĩa là hai biến phân loại phụ thuộc
- > 0. 05 bạn chấp nhận H₀ [Giả thuyết không] và bác bỏ H₁ [Giả thuyết thay thế]. Điều này có nghĩa là hai biến phân loại là độc lập
Trong trường hợp lựa chọn tính năng cho học máy, bạn sẽ muốn tính năng được so sánh với mục tiêu có giá trị p thấp [dưới 0. 05], vì điều này có nghĩa là tính năng này phụ thuộc vào [tương quan với] mục tiêu
Với điểm chi-square được tính toán, bạn cũng có thể sử dụng nó để tham khảo bảng chi-square để xem điểm của bạn nằm trong vùng từ chối hay vùng chấp nhận
Tất cả các bước trên nghe có vẻ hơi mơ hồ và cách tốt nhất để thực sự hiểu cách hoạt động của chi-square là xem một ví dụ. Trong phần tiếp theo, tôi sẽ sử dụng bộ dữ liệu Titanic và áp dụng kiểm tra chi-square trên một số tính năng và xem chúng có tương quan như thế nào với mục tiêu
Một cách hay để hiểu một chủ đề mới là xem qua các khái niệm bằng ví dụ. Đối với điều này, tôi sẽ sử dụng bộ dữ liệu Titanic cổ điển [https. //www. kaggle. com/tedllh/titanic-tàu]
Bộ dữ liệu Titanic thường được sử dụng trong học máy để minh họa cách xây dựng mô hình học máy và sử dụng mô hình đó để đưa ra dự đoán. Cụ thể, tập dữ liệu chứa một số tính năng [Pclass, Sex, Age, Embarked, v.v.] và một mục tiêu [Sống sót]. Một số tính năng trong tập dữ liệu là các biến phân loại
- Pclass-hạng cabin mà hành khách đã ở
- Giới tính-giới tính của hành khách
- Embarked-cảng lên tàu
- Sống sót - nếu hành khách sống sót sau thảm họa
Bởi vì bài viết này khám phá các mối quan hệ giữa các tính năng và mục tiêu phân loại, chúng tôi chỉ quan tâm đến những cột có chứa các giá trị phân loại
Đang tải tập dữ liệu
Bây giờ bạn đã có được tập dữ liệu, hãy tải nó lên trong Pandas DataFrame
import pandas as pd
import numpy as npdf = pd.read_csv['titanic_train.csv']
df.sample[5]
Hình ảnh của tác giả
Làm sạch dữ liệu và kỹ thuật tính năng
Có một số cột không thực sự hữu ích và do đó chúng tôi sẽ tiến hành loại bỏ chúng. Ngoài ra, có một số giá trị bị thiếu, vì vậy hãy loại bỏ tất cả các hàng có giá trị trống
df.drop[columns=['PassengerId','Name', 'Ticket','Fare','Cabin'],
inplace=True]
df.dropna[inplace=True]
df
Hình ảnh của tác giả
Chúng tôi cũng sẽ thêm một cột nữa có tên là Một mình, dựa trên các cột Parch [Cha mẹ hoặc con cái] và Sibsp [Anh chị em ruột hoặc vợ/chồng]. Ý tưởng mà chúng tôi muốn khám phá là liệu việc ở một mình có ảnh hưởng đến khả năng sống sót của hành khách hay không. Vì vậy, Alone là 1 nếu cả Parch và Sibsp đều là 0, nếu không thì nó là 0
df['Alone'] = [df['Parch'] + df['SibSp']].apply[
lambda x: 1 if x == 0 else 0]
df
Hình ảnh của tác giả
Trực quan hóa mối tương quan giữa các tính năng và mục tiêu
Bây giờ dữ liệu đã được làm sạch, hãy thử hình dung giới tính của hành khách có liên quan như thế nào đến sự sống sót của họ sau vụ tai nạn
import seaborn as sns
sns.barplot[x='Sex', y='Survived', data=df, ci=None]
Cột Sáu chứa dữ liệu danh nghĩa [i. e. thứ hạng không quan trọng]
Hình ảnh của tác giả
Từ hình trên, bạn có thể thấy rằng trong số tất cả các hành khách nữ, hơn 70% sống sót; . Có vẻ như tồn tại một mối quan hệ rất bền chặt giữa tính năng Giới tính và Sống sót. Để xác nhận điều này, chúng ta sẽ sử dụng kiểm định chi-square để xác nhận điều này sau
Làm thế nào về Pclass và Survived?
sns.barplot[x='Pclass', y='Survived', data=df, ci=None]
Hình ảnh của tác giả
Có lẽ không có gì đáng ngạc nhiên khi nó cho thấy hành khách ngồi ở hạng Pclass càng cao thì tỷ lệ sống sót của hành khách càng cao.
Tính năng quan tâm tiếp theo là nếu nơi lên tàu quyết định ai sống sót và ai không
sns.barplot[x='Embarked', y='Survived', data=df, ci=None]
Hình ảnh của tác giả
Từ biểu đồ, có vẻ như nhiều người bắt đầu từ C [Cherbourg] sống sót hơn
C = Cherbourg;
Bạn cũng muốn biết liệu ở một mình trong chuyến đi có khiến người ta sống sót hơn không
ax = sns.barplot[x='Alone', y='Survived', data=df, ci=None]
ax.set_xticklabels[['Not Alone','Alone']]
Hình ảnh của tác giả
Bạn có thể thấy rằng nếu một người ở cùng với gia đình của họ, người đó sẽ có cơ hội sống sót cao hơn
Trực quan hóa mối tương quan giữa từng tính năng
Bây giờ chúng tôi đã trực quan hóa mối quan hệ giữa các tính năng phân loại với mục tiêu [Sống sót], bây giờ chúng tôi muốn trực quan hóa mối quan hệ giữa từng tính năng. Trước khi bạn có thể làm điều đó, bạn cần chuyển đổi các giá trị nhãn trong cột Giới tính và Bắt đầu thành số. Để làm điều đó, bạn có thể sử dụng lớp LabelEncoder trong sklearn
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as snsfrom sklearn import preprocessing
le = preprocessing.LabelEncoder[]
le.fit[df['Sex']]
df['Sex'] = le.transform[df['Sex']]
sex_labels = dict[zip[le.classes_, le.transform[le.classes_]]]
print[sex_labels]le.fit[df['Embarked']]
df['Embarked'] = le.transform[df['Embarked']]
embarked_labels = dict[zip[le.classes_,
le.transform[le.classes_]]]
print[embarked_labels]
Đoạn mã trên nhãn mã hóa các cột Six và Embarked. Đầu ra hiển thị ánh xạ của các giá trị cho mỗi cột, điều này rất hữu ích sau này khi thực hiện dự đoán
________số 8Các câu sau đây cho thấy mối quan hệ giữa Embarked và Sex
ax = sns.barplot[x='Embarked', y='Sex', data=df, ci=None]
ax.set_xticklabels[embarked_labels.keys[]]
Có vẻ như nhiều nam giới lên máy bay từ Southampton [S] hơn là ở Queenstown [Q] và Cherbourg [C]
Làm thế nào về Bắt tay và Một mình?
df.drop[columns=['PassengerId','Name', 'Ticket','Fare','Cabin'],
inplace=True]
df.dropna[inplace=True]
df
0Hình ảnh của tác giả
Có vẻ như phần lớn những người khởi hành từ Queenstown đều đi một mình
Và cuối cùng, hãy xem mối quan hệ giữa Tình dục và Một mình
df.drop[columns=['PassengerId','Name', 'Ticket','Fare','Cabin'],
inplace=True]
df.dropna[inplace=True]
df
1Hình ảnh của tác giả
Như bạn có thể thấy, có nhiều nam giới đi du lịch một mình hơn nữ giới
Xác định các giả thuyết
Bây giờ bạn xác định giả thuyết không và giả thuyết thay thế của mình. Như đã giải thích trước đó, chúng
- H₀ [Giả thuyết không có giá trị] — rằng 2 biến phân loại được so sánh là độc lập với nhau
- H₁ [Giả thuyết thay thế] - rằng 2 biến phân loại được so sánh phụ thuộc vào nhau
Và bạn rút ra kết luận của mình dựa trên các điều kiện giá trị p sau đây
- p < 0. 05 - điều này có nghĩa là hai biến phân loại có tương quan với nhau
- p > 0. 05 - điều này có nghĩa là hai biến phân loại không tương quan với nhau
Tính toán χ2 theo cách thủ công
Hãy thực hiện thủ công các bước tính giá trị χ2. Bước đầu tiên là tạo một bảng dự phòng. Sử dụng các cột Sáu và Sống sót làm ví dụ, trước tiên bạn tạo một bảng dự phòng
Hình ảnh của tác giả
Bảng dự phòng ở trên hiển thị phân bố tần suất của hai cột phân loại — Giới tính và Người sống sót
Bậc tự do tiếp theo được tính là [số hàng -1] * [số cột -1]. Trong ví dụ này, bậc tự do là [2–1]*[2–1] = 1
Khi bảng dự phòng được tạo, hãy tổng hợp tất cả các hàng và cột, như thế này
Hình ảnh của tác giả
Trên đây là giá trị quan sát của bạn
Tiếp theo, bạn sẽ tính toán các giá trị Kỳ vọng. Đây là cách chúng được tính toán
- Thay thế từng giá trị trong giá trị được quan sát bằng tích của tổng của cột và tổng của hàng, chia cho tổng
Hình dưới đây cho thấy cách tính giá trị đầu tiên
Hình ảnh của tác giả
Hình tiếp theo cho thấy cách tính giá trị thứ hai
Hình ảnh của tác giả
Đây là kết quả cho các giá trị mong đợi
Hình ảnh của tác giả
Sau đó, tính giá trị chi-square cho mỗi ô bằng công thức cho χ2
Hình ảnh của tác giả
Áp dụng công thức này cho các giá trị Quan sát và Dự kiến, bạn sẽ nhận được các giá trị chi bình phương
Hình ảnh của tác giả
Điểm chi-square là tổng lớn của các giá trị chi-square
Hình ảnh của tác giả
Bạn có thể sử dụng các trang web sau để xác minh xem các số có chính xác không
- Máy tính Chi-Square - https. //www. toán học. com/data/chi-square-máy tính. html
Việc triển khai Python cho các bước trên được chứa trong hàm chi2_by_hand[] sau
df.drop[columns=['PassengerId','Name', 'Ticket','Fare','Cabin'],
inplace=True]
df.dropna[inplace=True]
df
2Hàm chi2_by_hand[] nhận ba đối số — khung dữ liệu chứa tất cả các cột của bạn, theo sau là hai chuỗi chứa tên của hai cột mà bạn đang so sánh. Nó trả về một bộ — điểm chi-square, cộng với bậc tự do
Bây giờ hãy kiểm tra chức năng trên bằng bộ dữ liệu Titanic. Đầu tiên, hãy so sánh cột Sáu và cột Sống sót
df.drop[columns=['PassengerId','Name', 'Ticket','Fare','Cabin'],
inplace=True]
df.dropna[inplace=True]
df
3Bạn sẽ thấy kết quả sau
df.drop[columns=['PassengerId','Name', 'Ticket','Fare','Cabin'],
inplace=True]
df.dropna[inplace=True]
df
4Sử dụng điểm chi-square, bây giờ bạn có thể quyết định xem bạn sẽ chấp nhận hay bác bỏ giả thuyết không bằng cách sử dụng đường cong phân phối chi-square
Hình ảnh của tác giả
Trục x biểu thị điểm số χ2. Khu vực bên phải của khu vực chi bình phương quan trọng được gọi là khu vực bác bỏ. Khu vực bên trái của nó được gọi là khu vực chấp nhận. Nếu điểm chi-square mà bạn đạt được nằm trong vùng chấp nhận, thì giả thuyết không được chấp nhận;
Vì vậy, làm thế nào để bạn có được khu vực chi-square quan trọng?
Bảng từ https. //Mọi người. smp. Vì thế. ăn. au/YoniNazarathy/stat_models_B_course_spring_07/distributions/chisqtab. pdf
Bạn có thể xem Bảng Chi-Square tại https. //www. toán học. com/data/chi-square-table. html
Đây là cách bạn sử dụng bảng chi-square. Với α của bạn được đặt thành 0. 05 và 1 bậc tự do, vùng chi-square quan trọng là 3. 84 [tham khảo biểu đồ trên]. Đặt giá trị này vào đường cong phân phối chi-square, bạn có thể kết luận rằng
Hình ảnh của tác giả
- Vì giá trị chi-square được tính toán [205] lớn hơn 3. 84, do đó nó rơi vào vùng bác bỏ, và do đó giả thuyết không bị bác bỏ và giả thuyết thay thế được chấp nhận
- Nhắc lại giả thuyết thay thế của chúng tôi là. H₁ [Giả thuyết thay thế] - rằng 2 biến phân loại được so sánh phụ thuộc vào nhau
Điều này có nghĩa là các cột Six và Survived phụ thuộc vào nhau
Thông thường, bạn có thể sử dụng hàm chi2_by_hand[] trên các tính năng khác
Tính giá trị p
Phần trước cho thấy cách bạn có thể chấp nhận hoặc bác bỏ giả thuyết không bằng cách kiểm tra điểm chi-square và so sánh nó với đường cong phân phối chi-square
Một cách khác để chấp nhận hoặc bác bỏ giả thuyết không là sử dụng giá trị p. Hãy nhớ rằng, giá trị p có thể được tính bằng cách sử dụng điểm chi bình phương và bậc tự do
Để đơn giản, chúng ta sẽ không đi vào chi tiết cách tính giá trị p bằng tay.
Trong Python, bạn có thể tính giá trị p bằng cách sử dụng hàm sf[] của mô-đun thống kê
df.drop[columns=['PassengerId','Name', 'Ticket','Fare','Cabin'],
inplace=True]
df.dropna[inplace=True]
df
5Bây giờ bạn có thể gọi hàm chi2_by_hand[] và nhận cả điểm chi_square, bậc tự do và giá trị p
df.drop[columns=['PassengerId','Name', 'Ticket','Fare','Cabin'],
inplace=True]
df.dropna[inplace=True]
df
6Đoạn mã trên dẫn đến giá trị p sau
df.drop[columns=['PassengerId','Name', 'Ticket','Fare','Cabin'],
inplace=True]
df.dropna[inplace=True]
df
7Tóm lại, bạn chấp nhận hoặc bác bỏ các giả thuyết và hình thành kết luận của mình dựa trên các điều kiện giá trị p sau đây
- p < 0. 05 - điều này có nghĩa là hai biến phân loại có tương quan với nhau
- p > 0. 05 - điều này có nghĩa là hai biến phân loại không tương quan với nhau
Và vì p < 0. 05 - điều này có nghĩa là hai biến phân loại có tương quan với nhau
Thử các tính năng khác
Hãy thử các cột phân loại có chứa các giá trị danh nghĩa
df.drop[columns=['PassengerId','Name', 'Ticket','Fare','Cabin'],
inplace=True]
df.dropna[inplace=True]
df
8Vì giá trị p của cả Embarked và Alone đều < 0. 05, bạn có thể kết luận rằng cả hai tính năng Bắt đầu và Một mình đều tương quan với mục tiêu Sống sót và nên được đưa vào để đào tạo trong mô hình của bạn
Tóm lượcTrong bài viết này, tôi đã giải thích ngắn gọn về cách thức hoạt động của kiểm tra thống kê chi bình phương và cách bạn có thể áp dụng nó vào bộ dữ liệu Titanic. Một vài lưu ý thận trọng sẽ hữu ích ở đây
- Trong khi hệ số Pearson và hệ số xếp hạng của Spearman đo lường mức độ liên kết giữa hai biến, kiểm định chi bình phương đo lường tầm quan trọng của mối liên hệ giữa hai biến. Điều nó cho bạn biết là liệu mối quan hệ mà bạn tìm thấy trong mẫu có khả năng tồn tại trong dân số hay khả năng xảy ra do lỗi lấy mẫu là bao nhiêu
- Kiểm tra chi bình phương nhạy cảm với các tần số nhỏ trong bảng dự phòng của bạn. Nói chung, nếu một ô trong bảng dự phòng của bạn có tần số từ 5 trở xuống, phép kiểm chi bình phương sẽ dẫn đến kết luận sai. Ngoài ra, không nên sử dụng kiểm định chi bình phương nếu cỡ mẫu nhỏ hơn 50
Tôi hy vọng bây giờ bạn đã hiểu rõ hơn về cách thức hoạt động của chi-square và cách nó có thể được sử dụng để lựa chọn tính năng trong học máy. Hẹn gặp lại trong bài viết tiếp theo của tôi