Mối tương quan giữa hai biến phân loại Python

Trong cả hai trường hợp này, độ mạnh của mối tương quan giữa các biến có thể được đo lường bằng kiểm tra ANOVA. ANOVA là viết tắt của Phân tích phương sai. Trên thực tế, thử nghiệm này đo lường nếu có bất kỳ sự khác biệt đáng kể nào giữa các giá trị trung bình của biến số đối với từng giá trị phân loại. Đây là thứ mà bạn cũng có thể hình dung bằng cách sử dụng biểu đồ hộp

Giả thuyết không[H0] Thử nghiệm giả thuyết ANOVA. Các biến không tương quan với nhau

Trong ví dụ dưới đây, chúng tôi đang cố gắng đo lường xem có bất kỳ mối tương quan nào giữa FuelType trên CarPrices hay không. Ở đây FuelType là một công cụ dự đoán phân loại và CarPrices là biến mục tiêu số

# Generating sample data
import pandas as pd
ColumnNames=['FuelType','CarPrice']
DataValues= [[  'Petrol',   2000],
             [  'Petrol',   2100],
             [  'Petrol',   1900],
             [  'Petrol',   2150],
             [  'Petrol',   2100],
             [  'Petrol',   2200],
             [  'Petrol',   1950],
             [  'Diesel',   2500],
             [  'Diesel',   2700],
             [  'Diesel',   2900],
             [  'Diesel',   2850],
             [  'Diesel',   2600],
             [  'Diesel',   2500],
             [  'Diesel',   2700],
             [  'CNG',   1500],
             [  'CNG',   1400],
             [  'CNG',   1600],
             [  'CNG',   1650],
             [  'CNG',   1600],
             [  'CNG',   1500],
             [  'CNG',   1500]
        
           
           ]
#Create the Data Frame
CarData=pd.DataFrame[data=DataValues,columns=ColumnNames]
print[CarData.head[]]
########################################################
# f_oneway[] function takes the group data as input and 
# returns F-statistic and P-value
from scipy.stats import f_oneway

# Running the one-way anova test between CarPrice and FuelTypes
# Assumption[H0] is that FuelType and CarPrices are NOT correlated

# Finds out the Prices data for each FuelType as a list
CategoryGroupLists=CarData.groupby['FuelType']['CarPrice'].apply[list]

# Performing the ANOVA test
# We accept the Assumption[H0] only when P-Value > 0.05
AnovaResults = f_oneway[*CategoryGroupLists]
print['P-Value for Anova is: ', AnovaResults[1]]

Đầu ra mẫu

Vì đầu ra của giá trị P gần như bằng không, do đó, chúng tôi bác bỏ H0. Điều này có nghĩa là các biến có tương quan với nhau

Mối tương quan giữa hai tính năng phân loại

Đây là một tình huống thường phát sinh trong quá trình học máy phân loại. Biến mục tiêu là biến phân loại và các yếu tố dự đoán có thể là liên tục hoặc phân loại, vì vậy khi cả hai đều là phân loại, thì cường độ của mối quan hệ giữa chúng có thể được đo bằng cách sử dụng kiểm tra Chi bình phương

Kiểm định Chi-square tìm xác suất của giả thuyết Null[H0]

  • Giả định[H0]. Hai cột KHÔNG liên quan đến nhau
  • Kết quả kiểm tra Chi-Square. Xác suất của H0 là đúng
  • Bạn có thể tìm thêm thông tin về ChiSq tại đây

Nó có thể giúp hiểu liệu cả hai biến phân loại có tương quan với nhau hay không. Trong trường hợp bên dưới, chúng tôi cố gắng đo lường mối tương quan giữa GENDER và LOAN_APPROVAL

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame[data=DataValues,columns=ColumnNames]
print[LoanData.head[]]
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab[index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN']]
print[CrosstabResult]

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency[CrosstabResult]

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption[H0]

print['The P-Value of the ChiSq Test is:', ChiSqResult[1]]

Đầu ra mẫu

Kiểm định chi bình phương giữa hai biến phân loại để tìm mối tương quan

H0. Các biến không tương quan với nhau. Đây là H0 được sử dụng trong kiểm định Chi-square

Trong ví dụ trên, giá trị p cao hơn 0. 05. Do đó H0 sẽ được chấp nhận. Điều này có nghĩa là các biến không tương quan với nhau. Điều này có nghĩa là nếu hai biến tương quan với nhau, thì giá trị p sẽ rất gần bằng 0

Chi tiết về bài kiểm tra chi-square

Trong phần này, tôi sẽ giải thích cách chúng ta có thể kiểm tra hai cột phân loại trong tập dữ liệu để xác định xem chúng có phụ thuộc lẫn nhau không [i. e. tương quan]. Chúng tôi sẽ sử dụng phép kiểm tra thống kê có tên 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. 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ông thường chứa các giá trị được sắp xếp theo 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 bài kiểm tra chi bình phương là so sánh các giá trị quan sát được trong dữ liệu với các giá trị mong đợi và xem liệu chúng có liên quan 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, nơi chúng tôi 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

  • Kiểm tra mức độ phù hợp Chi-Square — 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 định độ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. jmp. 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 liệu hai biến phân loại có tương quan với nhau hay không, chúng tôi sẽ sử dụng Kiểm tra tí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 ta cần thực hiện các bước sau

  1. Xác định giả thuyết vô hiệu và giả thuyết thay thế. họ đang
  • H₀ [Giả thuyết vô hiệu] — rằng 2 biến phân loại được so sánh độ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. Quyết định giá trị α. Đây là rủi ro mà chúng tôi sẵn sàng chấp nhận khi đưa ra kết luận sai. Ví dụ: giả sử chúng ta đặt α=0. 05 khi kiểm tra tính độc lập. Điều này có nghĩa là chúng tôi đ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 toán 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 [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 biết kết quả kiểm tra có ý nghĩa 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. bỏ đi. edu/xem/bài học/9beaa382bf7e/8

Để tính giá trị p, chúng ta cần hai mẩu 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ị α chúng tôi đã chọn], chúng tôi bác bỏ 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, chúng tôi 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 độc lập

Trong trường hợp lựa chọn tính năng cho máy học, chúng tôi muốn tính năng đang đượ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, chúng ta cũng có thể sử dụng điểm này để tham khảo bảng chi-square để xem điểm nằm trong vùng từ chối hay vùng chấp nhận. 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 bình phương 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

Sử dụng kiểm tra chi bình phương trên bộ dữ liệu Titanic

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 nó để đưa ra dự đoán. Cụ thể, tập dữ liệu chứa một số tính năng [Pclass, Giới tính, Tuổi, Đã lên đường, 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ì phần này khám phá các mối quan hệ giữa các tính năng phân loại và mục tiêu, 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

Hãy tải tập dữ liệu trong Pandas DataFrame

import pandas as pd
import numpy as np
df = pd.read_csv['titanic_train.csv']
df.sample[5]

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

Chúng tôi cũng sẽ thêm một cột khác có tên là Một mình, dựa trên 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 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

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ọ trong vụ tai nạn

import seaborn as sns
sns.barplot[x='Sex', y='Survived', data=df, ci=None]     

Cột Giới tính chứa dữ liệu danh nghĩa [i. e. thứ hạng không quan trọng]

Từ con số trên, chúng ta 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 các tính năng Tình dục 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

Thế còn Pclass và Surved thì sao?

sns.barplot[x='Pclass', y='Survived', data=df, ci=None]

Có lẽ không có gì đáng ngạc nhiên khi điều đó cho thấy rằng hạng Pclass mà hành khách ngồi 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]

Từ biểu đồ, có vẻ như nhiều người khởi hành từ C [Cherbourg] đã sống sót hơn

C = Cherbourg;

Chúng tôi cũng muốn biết liệu ở một mình trong chuyến đi có khiến một người sống sót hơn không

________số 8

Chúng ta 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 có thể làm điều đó, chúng tôi 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 đó, chúng ta 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]

Nhãn đoạn mã trên mã hóa các cột Sex và Embarked . Đầu ra hiển thị ánh xạ của các giá trị cho từng cột, điều này rất hữu ích sau này khi thực hiện dự đoán

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame[data=DataValues,columns=ColumnNames]
print[LoanData.head[]]
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab[index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN']]
print[CrosstabResult]

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency[CrosstabResult]

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption[H0]

print['The P-Value of the ChiSq Test is:', ChiSqResult[1]]
0

Các câu sau đây cho thấy mối quan hệ giữa Đã bắt tay và Giới tính

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame[data=DataValues,columns=ColumnNames]
print[LoanData.head[]]
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab[index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN']]
print[CrosstabResult]

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency[CrosstabResult]

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption[H0]

print['The P-Value of the ChiSq Test is:', ChiSqResult[1]]
1

Có vẻ như nhiều nam giới lên máy bay từ Southampton [S] hơn là ở Queenstown [Q] và Cherbourg [C]

Thế còn Bắt đầu và Một mình thì sao?

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame[data=DataValues,columns=ColumnNames]
print[LoanData.head[]]
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab[index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN']]
print[CrosstabResult]

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency[CrosstabResult]

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption[H0]

print['The P-Value of the ChiSq Test is:', ChiSqResult[1]]
2

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

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame[data=DataValues,columns=ColumnNames]
print[LoanData.head[]]
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab[index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN']]
print[CrosstabResult]

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency[CrosstabResult]

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption[H0]

print['The P-Value of the ChiSq Test is:', ChiSqResult[1]]
3

Như chúng ta 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ờ chúng ta xác định giả thuyết vô hiệu và giả thuyết thay thế. Như đã giải thích trước đó, chúng

  • H₀ [Giả thuyết vô hiệu] — rằng 2 biến phân loại được so sánh độ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à chúng tôi rút ra kết luận 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 bảng dự phòng. Sử dụng các cột Giới tính và Sống sót làm ví dụ, trước tiên chúng tôi tạo một bảng dự phòng

Bảng ngẫu nhiên ở 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à Sống sót

Bậc thang tự do tiếp theo được tính bằng [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

Trên đây là Giá trị được quan sát

Tiếp theo, chúng tôi sẽ tính toán các giá trị Dự kiến. Đâ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 tiếp theo cho thấy cách tính giá trị thứ hai

Đây là kết quả cho các giá trị Mong đợi

Sau đó, tính giá trị chi-square cho từng ô bằng cách sử dụng công thức cho χ2

Áp dụng công thức này cho các giá trị Quan sát và Dự kiến , chúng tôi nhận được các giá trị chi bình phương

Điểm chi-square là tổng các giá trị chi-square

Chúng tôi có thể sử dụng các trang web sau để xác minh xem các con 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ó trong hàm chi2_by_hand[] sau đây

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame[data=DataValues,columns=ColumnNames]
print[LoanData.head[]]
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab[index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN']]
print[CrosstabResult]

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency[CrosstabResult]

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption[H0]

print['The P-Value of the ChiSq Test is:', ChiSqResult[1]]
4

Hàm chi2_by_hand[] có ba đối số — khung dữ liệu chứa tất cả các cột, theo sau là hai chuỗi chứa tên của hai cột mà chúng ta đ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. Trước tiên, hãy so sánh cột Giới tính và cột Sống sót 

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame[data=DataValues,columns=ColumnNames]
print[LoanData.head[]]
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab[index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN']]
print[CrosstabResult]

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency[CrosstabResult]

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption[H0]

print['The P-Value of the ChiSq Test is:', ChiSqResult[1]]
5

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame[data=DataValues,columns=ColumnNames]
print[LoanData.head[]]
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab[index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN']]
print[CrosstabResult]

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency[CrosstabResult]

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption[H0]

print['The P-Value of the ChiSq Test is:', ChiSqResult[1]]
6

Bằng cách sử dụng điểm số chi-bình phương, giờ đây chúng ta có thể quyết định xem chúng ta sẽ chấp nhận hay từ chối giả thuyết không bằng cách sử dụng đường cong phân phối chi-square

Trục x biểu thị điểm χ2. Khu vực bên phải của khu vực chi-square quan trọng được gọi là khu vực từ chối. 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 bình phương mà chúng tôi thu được nằm trong vùng chấp nhận, thì giả thuyết không được chấp nhận;

Vậy làm thế nào để chúng ta có được vùng chi-square quan trọng?

Chúng ta 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 chúng tôi sử dụng bảng chi-square. Với α được đặt thành 0. 05 và 1 bậc tự do, vùng chi-square tới hạn 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, chúng ta có thể kết luận rằng

  • 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 Giới tính và Sống sót phụ thuộc vào nhau. Chúng ta 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 chúng ta 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, chúng ta có thể tính toán giá trị p bằng cách sử dụng hàm sf[] của mô-đun thống kê

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame[data=DataValues,columns=ColumnNames]
print[LoanData.head[]]
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab[index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN']]
print[CrosstabResult]

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency[CrosstabResult]

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption[H0]

print['The P-Value of the ChiSq Test is:', ChiSqResult[1]]
7

Giờ đây, chúng ta 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

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame[data=DataValues,columns=ColumnNames]
print[LoanData.head[]]
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab[index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN']]
print[CrosstabResult]

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency[CrosstabResult]

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption[H0]

print['The P-Value of the ChiSq Test is:', ChiSqResult[1]]
8

Đoạn mã trên dẫn đến giá trị p sau

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame[data=DataValues,columns=ColumnNames]
print[LoanData.head[]]
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab[index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN']]
print[CrosstabResult]

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency[CrosstabResult]

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption[H0]

print['The P-Value of the ChiSq Test is:', ChiSqResult[1]]
9

Tóm lại, chúng tôi chấp nhận hoặc từ chối các giả thuyết và đưa ra kết luận 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

import pandas as pd
import numpy as np
df = pd.read_csv['titanic_train.csv']
df.sample[5]
0

Vì giá trị p cho cả Embarked và Alone đều < 0. 05, chúng tôi có thể kết luận rằng cả hai tính năng Đã lên đường 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 chúng tôi

Tóm tắt Chi-square

Một vài lưu ý thận trọng sẽ hữu ích ở đây

  1. Trong khi hệ số Pearson và hệ số xếp hạng của Spearman đo lường độ mạnh của mối liên hệ giữa hai biến, kiểm định chi-square đo lường ý nghĩa của mối liên hệ giữa hai biến. Điều nó cho chúng ta biết là liệu mối quan hệ mà chúng ta tìm thấy trong mẫu có khả năng tồn tại trong dân số hay không hay khả năng xảy ra do lỗi lấy mẫu là bao nhiêu
  2. Kiểm tra chi-square nhạy cảm với các tần suất nhỏ trong bảng ngẫu nhiên. Nói chung, nếu một ô trong bảng dự phòng có tần suất từ ​​5 trở xuống, phép kiểm chi bình phương sẽ dẫn đến sai sót trong kết luận. 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
Thông tin chi tiết về ANOVA

Thử nghiệm chi bình phương được sử dụng khi cả biến độc lập và biến phụ thuộc đều là biến phân loại. Tuy nhiên, nếu biến độc lập là biến phân loại và biến phụ thuộc là biến số thì sao?

Và vì vậy trong phần này, cuộc thảo luận của chúng ta sẽ xoay quanh ANOVA và cách chúng ta sử dụng nó trong học máy để lựa chọn tính năng. Trước khi chúng ta bắt đầu, thật hữu ích khi tóm tắt các phương pháp khác nhau mà chúng ta đã thảo luận cho đến nay

ANOVA là gì?

ANOVA được sử dụng để kiểm tra hai biến, trong đó

  • một là biến phân loại
  • khác là một biến số

ANOVA được sử dụng khi biến phân loại có ít nhất 3 nhóm [i. e ba giá trị duy nhất khác nhau]. Nếu chỉ muốn so sánh hai nhóm, chúng tôi sử dụng kiểm định t. ANOVA cho chúng tôi biết nếu một biến số thay đổi theo cấp độ của biến phân loại. ANOVA sử dụng các bài kiểm tra f để kiểm tra thống kê tính bình đẳng của các phương tiện. Các bài kiểm tra F được đặt tên theo thống kê kiểm tra của chúng, F, được đặt tên để vinh danh Ngài Ronald Fisher

Dưới đây là một số ví dụ để dễ hiểu hơn khi chúng ta có thể sử dụng ANOVA

Chúng tôi có một bộ dữ liệu chứa thông tin về một nhóm người liên quan đến việc sử dụng phương tiện truyền thông xã hội của họ và số giờ họ ngủ

Chúng tôi muốn tìm hiểu xem liệu lượng sử dụng mạng xã hội [biến phân loại] có tác động trực tiếp đến số giờ ngủ [biến số]

Chúng tôi có bộ dữ liệu chứa ba nhãn hiệu thuốc khác nhau và số ngày thuốc có hiệu lực

Chúng tôi muốn tìm hiểu xem liệu có mối quan hệ trực tiếp giữa một thương hiệu cụ thể và hiệu quả của nó hay không

ANOVA kiểm tra xem có phương sai bằng nhau giữa các nhóm tính năng phân loại đối với phản hồi số hay không. Nếu có phương sai bằng nhau giữa các nhóm, điều đó có nghĩa là tính năng này không ảnh hưởng đến phản hồi và do đó, nó [biến phân loại] không thể được xem xét để đào tạo mô hình

Thực hiện ANOVA bằng tay

Cách tốt nhất để hiểu ANOVA là sử dụng một ví dụ. Trong ví dụ sau, tôi sử dụng tập dữ liệu hư cấu để ghi lại thời gian phản ứng của một nhóm người khi họ được đưa cho một loại đồ uống cụ thể

Tập dữ liệu mẫu

Tôi có tập dữ liệu mẫu có tên đồ uống. csv chứa nội dung sau

import pandas as pd
import numpy as np
df = pd.read_csv['titanic_train.csv']
df.sample[5]
1

Có tất cả 10 đội — mỗi đội gồm 3 người. Mỗi người trong nhóm được phát ba loại đồ uống khác nhau — nước, coca và cà phê. Sau khi uống đồ uống, họ được yêu cầu thực hiện một số hoạt động và thời gian phản ứng của họ được ghi lại. Mục đích của thí nghiệm này là để xác định xem đồ uống có ảnh hưởng gì đến thời gian phản ứng của một người hay không

Trước tiên, hãy tải tập dữ liệu vào Khung dữ liệu Pandas

import pandas as pd
import numpy as np
df = pd.read_csv['titanic_train.csv']
df.sample[5]
2

Ghi lại kích thước quan sát mà chúng tôi sẽ sử dụng sau này

import pandas as pd
import numpy as np
df = pd.read_csv['titanic_train.csv']
df.sample[5]
3

Trực quan hóa tập dữ liệu

Sẽ rất hữu ích khi trực quan hóa việc phân phối dữ liệu bằng Boxplot

import pandas as pd
import numpy as np
df = pd.read_csv['titanic_train.csv']
df.sample[5]
4

Chúng ta có thể thấy rằng ba loại đồ uống có cùng thời gian phản ứng trung bình

Xoay khung dữ liệu

Để thuận tiện cho việc tính toán ANOVA, chúng ta cần xoay khung dữ liệu

import pandas as pd
import numpy as np
df = pd.read_csv['titanic_train.csv']
df.sample[5]
5

Các cột đại diện cho ba loại đồ uống khác nhau và các hàng đại diện cho 10 đội. Chúng tôi cũng sẽ tận dụng cơ hội này để ghi lại số lượng mục trong mỗi nhóm, cũng như số lượng nhóm mà chúng tôi sẽ sử dụng sau này

import pandas as pd
import numpy as np
df = pd.read_csv['titanic_train.csv']
df.sample[5]
6

Xác định các giả thuyết

Bây giờ chúng ta xác định giả thuyết vô hiệu và giả thuyết thay thế, giống như kiểm định chi bình phương. họ đang

  • H₀ [Giả thuyết vô hiệu] — rằng không có sự khác biệt giữa các phương tiện nhóm
  • H₁ [Giả thuyết thay thế] — rằng ít nhất một nhóm khác biệt đáng kể so với giá trị trung bình tổng thể của biến phụ thuộc

Bước 1 — Tính phương tiện cho tất cả các nhóm

Bây giờ chúng tôi đã sẵn sàng để bắt đầu tính toán cho ANOVA. Đầu tiên, hãy tìm giá trị trung bình cho mỗi nhóm

import pandas as pd
import numpy as np
df = pd.read_csv['titanic_train.csv']
df.sample[5]
7

Từ đây, giờ đây chúng ta có thể tính giá trị trung bình tổng thể

import pandas as pd
import numpy as np
df = pd.read_csv['titanic_train.csv']
df.sample[5]
8

Bước 2 — Tính Tổng bình phương

Bây giờ chúng tôi đã tính được giá trị trung bình tổng thể, chúng tôi có thể tiến hành tính toán như sau

  • Tổng bình phương của tất cả các quan sát — SS_total
  • Tổng bình phương trong — SS_within
  • Tổng bình phương giữa — SS_between

Tổng bình phương của tất cả các quan sát — SS_total

Tổng bình phương của tất cả các quan sát được tính bằng cách trừ từng quan sát khỏi giá trị trung bình tổng thể, sau đó tính tổng tất cả các bình phương của sự khác biệt

Theo lập trình, SS_total được tính là

import pandas as pd
import numpy as np
df = pd.read_csv['titanic_train.csv']
df.sample[5]
9

Tổng bình phương trong — SS_within

Tổng bình phương bên trong là tổng bình phương độ lệch của các điểm xung quanh giá trị trung bình của nhóm

Theo lập trình, SS_within được tính là

df.drop[columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True]
df.dropna[inplace=True]
df
0

Tổng bình phương giữa — SS_between

Tiếp theo, chúng tôi tính tổng bình phương của trung bình nhóm từ trung bình tổng thể

Theo lập trình, SS_between được tính là

df.drop[columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True]
df.dropna[inplace=True]
df
1

Chúng tôi có thể xác minh rằng

SS_total = SS_between + SS_within

Tạo bảng ANOVA

Với tất cả các giá trị được tính toán, bây giờ chúng ta có thể hoàn thành bảng ANOVA. Nhớ lại chúng ta có các biến sau

Chúng ta có thể tính các bậc tự do khác nhau như sau

df.drop[columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True]
df.dropna[inplace=True]
df
2

Từ những điều trên, hãy tính các giá trị bình phương trung bình khác nhau

df.drop[columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True]
df.dropna[inplace=True]
df
3

Cuối cùng, chúng ta có thể tính giá trị F, là tỷ lệ của hai phương sai

df.drop[columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True]
df.dropna[inplace=True]
df
4

Nhớ lại trước đó tôi đã đề cập ANOVA sử dụng các bài kiểm tra f để kiểm tra thống kê tính bình đẳng của phương tiện

Sau khi có được giá trị F, bây giờ chúng ta phải tham khảo bảng phân phối f [xem http. //www. socr. ucla. edu/Applet. dir/F_Table. html ví dụ] để có được giá trị tới hạn f. Bảng phân phối f được sắp xếp dựa trên giá trị α [thường là 0. 05]. Vì vậy, trước tiên chúng ta cần xác định vị trí của bảng dựa trên α=0. 05

Nguồn. http. //www. socr. ucla. edu/Applet. dir/F_Table. html

Tiếp theo, hãy quan sát rằng các cột của bảng phân phối f dựa trên df1 trong khi các hàng dựa trên df2. Chúng tôi có thể nhận được df1 và df2 từ các biến trước đó mà chúng tôi đã tạo

df.drop[columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True]
df.dropna[inplace=True]
df
5

Bằng cách sử dụng các giá trị của df1 và df2, giờ đây, chúng tôi có thể xác định vị trí giá trị quan trọng của f bằng cách định vị cột df1 và hàng df2

Từ hình trên, chúng ta có thể thấy rằng giá trị tới hạn f là 3. 3541. Sử dụng giá trị này, bây giờ chúng tôi có thể quyết định xem chúng tôi sẽ chấp nhận hay từ chối giả thuyết không bằng cách sử dụng đường cong phân phối F

Vì giá trị f [0. 0171, là những gì chúng tôi có thể tính toán] nhỏ hơn giá trị tới hạn f trong bảng phân phối f, chúng tôi chấp nhận giả thuyết không — điều này có nghĩa là không có phương sai trong các nhóm khác nhau — tất cả các phương tiện đều giống nhau. Đối với máy học, tính năng này — drink_type, không nên được đưa vào đào tạo vì có vẻ như các loại đồ uống khác nhau không ảnh hưởng đến thời gian phản ứng. Chúng ta chỉ nên đưa vào một tính năng để đào tạo nếu chúng ta bác bỏ giả thuyết không vì điều này có nghĩa là các giá trị trong các loại đồ uống ảnh hưởng đến thời gian phản ứng

Sử dụng mô-đun Thống kê để tính điểm f

Trong phần trước, chúng tôi đã tính giá trị f cho tập dữ liệu của mình theo cách thủ công. Trên thực tế, có một cách dễ dàng hơn — sử dụng hàm f_oneway[] của mô-đun thống kê để tính giá trị f và giá trị p

df.drop[columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True]
df.dropna[inplace=True]
df
6

Hàm f_oneway[] lấy các nhóm làm đầu vào và trả về ANOVA F và giá trị p

Ở trên, giá trị f là 0. 0170760934691432 [giống với giá trị chúng tôi đã tính theo cách thủ công] và giá trị p là 0. 9830794846682348

Quan sát hàm f_oneway[] nhận một số đối số khác nhau

Nếu chúng ta có nhiều nhóm, sẽ khá tẻ nhạt khi chuyển từng giá trị của tất cả các nhóm một. Vì vậy, có một cách dễ dàng hơn

df.drop[columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True]
df.dropna[inplace=True]
df
7

Sử dụng mô-đun statsmodels để tính điểm f

Một cách khác để tính giá trị f là sử dụng mô-đun statsmodel. Trước tiên, chúng tôi xây dựng mô hình bằng cách sử dụng hàm ols[], sau đó gọi hàm fit[] trên phiên bản của mô hình. Cuối cùng, chúng tôi gọi hàm anova_lm[] trên mô hình được trang bị và chỉ định loại thử nghiệm ANOVA sẽ thực hiện trên mô hình đó. Có 3 loại thử nghiệm ANOVA để thực hiện, nhưng phần thảo luận về chúng nằm ngoài phạm vi của bài viết này

df.drop[columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True]
df.dropna[inplace=True]
df
8

Đoạn mã trên tạo ra kết quả sau, giống như giá trị f mà chúng tôi đã tính toán trước đó [0. 017076]

Hàm anova_lm[] cũng trả về giá trị p [0. 983079]. Chúng ta có thể sử dụng các quy tắc sau để xác định xem biến phân loại có bất kỳ ảnh hưởng nào đến biến số không

  • nếu p < 0. 05, điều này có nghĩa là biến phân loại có ảnh hưởng đáng kể đến biến số
  • nếu p > 0. 05, điều này có nghĩa là biến phân loại không có ảnh hưởng đáng kể đến biến số

Vì giá trị p bây giờ là 0. 983079 [>0. 05], điều này có nghĩa là loại_đồ_uống không có ảnh hưởng đáng kể đến thời_gian phản ứng

Tóm tắt ANOVA

ANOVA giúp xác định xem một biến phân loại có ảnh hưởng đến một biến số hay không. Cho đến nay, phép thử ANOVA mà chúng ta đã thảo luận được gọi là phép thử ANOVA một chiều. Có một vài biến thể của ANOVA

  • ANOVA một chiều— được sử dụng để kiểm tra cách một biến số phản ứng với các mức của một biến phân loại độc lập
  • ANOVA hai chiều —được sử dụng để kiểm tra xem một biến số phản ứng như thế nào với các mức của hai biến phân loại độc lập
  • ANOVA đa chiều — được sử dụng để kiểm tra xem một biến số phản ứng như thế nào với các cấp độ của nhiều biến phân loại độc lập

Sử dụng ANOVA hai chiều hoặc ANOVA nhiều chiều, chúng tôi có thể điều tra tác động kết hợp của hai [hoặc nhiều] biến phân loại độc lập đối với một biến số phụ thuộc

Tài nguyên

df.drop[columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True]
df.dropna[inplace=True]
df
9

https. // hướng tới khoa học dữ liệu. com/statistics-in-python-using-chi-square-for-feature-selection-d44f467ca745

Làm cách nào để tính toán mối tương quan giữa các biến phân loại trong Python?

Nếu một biến phân loại chỉ có hai giá trị [i. e. đúng/sai], sau đó chúng ta có thể chuyển đổi nó thành kiểu dữ liệu số [0 và 1]. Vì nó trở thành một biến số nên chúng ta có thể tìm ra mối tương quan bằng cách sử dụng khung dữ liệu. hàm Corr[] .

Bạn có thể tương quan hai biến phân loại?

Hơn nữa, nếu một trong hai biến của cặp là biến phân loại, thì chúng tôi không thể sử dụng hệ số tương quan . Chúng tôi sẽ phải chuyển sang các số liệu khác. Nếu cả x và y đều phân loại, chúng ta có thể thử Cramer's V hoặc hệ số phi.

Làm thế nào để tính toán mối tương quan giữa hai biến phân loại?

Việc kiểm tra xem hai biến phân loại có độc lập hay không có thể được thực hiện bằng Kiểm định độc lập Chi-Squared . Đây là một bài kiểm tra Chi-Square điển hình. nếu chúng ta giả định rằng hai biến là độc lập, thì các giá trị của bảng dự phòng cho các biến này sẽ được phân phối đồng đều.

Làm cách nào để tìm mối tương quan của các biến phân loại trong gấu trúc?

Giống như các loại dữ liệu khác như số, boolean, chúng ta không thể sử dụng các phương thức sẵn có của gấu trúc để tạo ma trận tương quan. Để tìm mối tương quan của các biến phân loại, chúng ta sẽ sử dụng một thư viện có tên là dython. .
NumPy
gấu trúc
sinh ra biển
khoa học viễn tưởng
matplotlib
scikit-học
cốt truyện Scikit

Chủ Đề