før du foretager en maskinindlæringsmodel på et tabelformet datasæt, kontrollerer vi normalt, om der er en sammenhæng mellem de uafhængige og målvariabler. Dette kan gøres ved at måle sammenhængen mellem to variabler. I Python giver Pandas en funktion, dataframe.corr()
, for kun at finde sammenhængen mellem numeriske variabler.
i denne artikel vil vi se, hvordan man finder sammenhængen mellem kategoriske og kontinuerlige variabler.
sag 1: Når en uafhængig variabel kun har to værdier
punkt Biserial korrelation
hvis en kategorisk variabel kun har to værdier (dvs.sand/falsk), så kan vi konvertere den til en numerisk datatype (0 og 1). Da det bliver en numerisk variabel, kan vi finde ud af korrelationen ved hjælp af funktionen dataframe.corr()
.
lad os oprette en dataframe, der vil bestå af to kolonner: Medarbejdertype (EmpType) og løn.
med vilje vil vi tildele mere løn til EmpType1. På denne måde får vi en vis sammenhæng mellem Tomtype og løn.
Opret en dataframe med følgende egenskaber:
-
gennemsnitlig (gennemsnitlig) løn på
EmpType1
er 60 med en standardafvigelse på fem. -
gennemsnitlig (gennemsnitlig) løn på
EmpType2
er 50 med en standardafvigelse på fem.
import pandas as pdimport numpy as npnum1=np.random.normal(loc=60,scale=5,size=100)df1=pd.DataFrame(num1,columns=)df1='EmpType1'num2=np.random.normal(loc=50,scale=5,size=100)df2=pd.DataFrame(num2,columns=)df2='EmpType2'df=pd.concat(,axis=0)# Since Categorical variable 'Type' has only 2 values we will convert it into numeric (0 and 1) datatype.df=(df=='EmpType1').astype(int)df.corr()
Output
Løn | TypeInt | |
Løn | 1 | 0.736262 |
TypeInt | 0.736262 | 1 |
forholdet mellem løn og løn er 0,7. Så vi kan bestemme, at det er korreleret.
sag 2: Når uafhængige variabler har mere end to værdier
ANOVA (variansanalyse)
vi tildeler mere løn til EmpType1
, en gennemsnitlig løn til EmpType2
og en lav løn til EmpType3
. På denne måde får vi en vis sammenhæng mellem Tomtype og løn.
-
den gennemsnitlige løn på
EmpType1
er 90 med en standardafvigelse på fem. -
den gennemsnitlige løn på
EmpType2
er 70 med en standardafvigelse på fem. -
den gennemsnitlige løn på
EmpType3
er 50 med en standardafvigelse på fem.
num1=np.random.normal(loc=90,scale=5,size=100)df1=pd.DataFrame(num1,columns=)df1='EmpType1'num2=np.random.normal(loc=70,scale=5,size=100)df2=pd.DataFrame(num2,columns=)df2='EmpType2'num3=np.random.normal(loc=50,scale=5,size=100)df3=pd.DataFrame(num3,columns=)df3='EmpType3'df=pd.concat(,axis=0)from scipy import statsF, p = stats.f_oneway(df.Salary, df.Salary, df.Salary)print(F)
det output, vi får, er: 1443.6261
- da den gennemsnitlige løn for tre medarbejdertyper er 90, 70 og 50 (med en standardafvigelse på fem) er f-score 1444.
- hvis den gennemsnitlige løn for tre medarbejdertyper er 60, 55, 50, er f-score 86.
- og hvis den gennemsnitlige løn for tre medarbejdertyper er 51, 50, 49 (næsten den samme), vil F-score være tæt på 0, dvs. der er ingen sammenhæng.
- jo større f score værdi jo højere korrelation vil være.
du kan hente og køre fuld kode fra dette link.