Tábla:
Réamhrá
Is algartam foghlama meaisín aicmithe é Naive Bayes atá bunaithe ar theoirim Bayes. Tá sé an-éifeachtach go háirithe nuair a dhéileáiltear le sonraí téacsúla mar: Anailís Mothúchán, Brath Turscar agus aicmiú téacs.
Tugtar “Naive” ar an algartam seo mar gheall ar an mbonn tuisceana go bhfuil na hathróga tacair sonraí ar fad neamhspleách, rud nach amhlaidh i gcónaí.
Sula dtéann tú níos faide chun míniú a thabhairt ar an gcaoi a n-oibríonn bánna Naive, déanaimis cinnte go dtuigeann muid na rudaí seo a leanas:
Dóchúlacht choinníollach
Tá algartam Naive Bayes bunaithe ar theoirim Bayes atá bunaithe ar dhóchúlacht choinníollach: is é an dóchúlacht go dtarlóidh teagmhas A toisc gur tharla teagmhas B cheana féin.
Sampla:
Bíodh dhá phróca againn ina bhfuil liathróidí daite:
-
Tá 3 liathróid ghorma, 2 liathróid dhearga agus 4 liathróid ghlasa ag Jar 1.
-
Tá 1 liathróid ghorm, 4 liathróid dhearga agus 3 liathróid ghlasa ag Jar 2.
Teastaíonn uainn an dóchúlacht go roghnófar liathróid ghorm go randamach as ceann de na prócaí a ríomh
Ní hionann é agus suim na ndóchúlachtaí maidir le liathróid ghorm a roghnú as Jar1 nó Jar2.
Anois, ba mhaith linn an dóchúlacht go roghnófar liathróid ghorm a ríomh toisc gur roghnaigh muid Jar1:
Ar deireadh, ba mhaith linn an dóchúlacht go roghnódh Jar1 a ríomh toisc gur tharraingeamar liathróid ghorm. Anseo úsáidimid Teoirim Bayes a luaitear mar seo a leanas:
Aicmiú Naive Bayes
In aicmitheoir Naive Bayes, ba mhaith linn an aicme a fháil a uasmhéadaíonn an dóchúlacht choinníollach i bhfianaise an veicteoir ionchuir X; mar sin, is féidir Naive Bayes a fhoirmiú mar seo a leanas:
Le húsáid Teoirim Bayes, déantar an fheidhm:
Sa fhoirmliú seo, tá sé éasca P(Ci) nach ionann é agus dóchúlacht an aicme Ci a ríomh, agus is furasta P(x) a ríomh arb é an dóchúlacht go dtarlóidh an teagmhas x.
Is é an rud atá deacair a ríomh ná P(x|Ci); dóchúlacht an teagmhais x tugtha don rang Ci. Chun é seo a shimpliú tuilleadh, ní mór dúinn glacadh leis go bhfuil na hathróga ionchuir go léir neamhspleách; mar sin, is féidir linn scríobh:
Agus is mar gheall ar an toimhde seo a thugaimid “Naive” ar an aicmitheoir seo, toisc nach féidir linn neamhspleáchas na n-athróg ionchuir a ráthú i gcónaí. Éiríonn an t-aicmitheoir Naive Bayes:
Déanta na fírinne, is féidir linn an fhoirmliú seo a shimpliú tuilleadh trí P(x) a dhíchur, mar tá sé mar an gcéanna do gach rang:
Anois, déanaimis féachaint ar shampla:
| Aimsir | Am | Lá na seachtaine | Dinnéar |
| ------- | -------- | --------------- | ------ |
| Geal | Tráthnóna | Deireadh Seachtaine | Cócairí |
| Scamaill Scaipthe | Oíche | Lá na seachtaine | Orduithe |
| Báistí | Oíche | Lá na seachtaine | Orduithe |
| Báistí | Meán lae | Lá na seachtaine | Orduithe |
| Scamaill Scaipthe | Meán lae | Deireadh Seachtaine | Cócairí |
| Geal | Oíche | Deireadh Seachtaine | Cócairí |
| Sneachta | Tráthnóna | Deireadh Seachtaine | Orduithe |
| Geal | Oíche | Lá na seachtaine | Cócairí |
| Geal | Meán oíche | Deireadh Seachtaine | Orduithe |
Anseo, tá tacar sonraí beag againn ina bhfuil 3 athróg ionchuir: Aimsir, Am agus Lá na seachtaine, agus athróg sprice amháin: “Dinnéar” a thugann le fios cé acu a chócaíonn nó a ordaíonn duine a dhinnéar . Ba mhaith linn rang an ionchuir x={Glan, Tráthnóna, Deireadh Seachtaine} a fháil:
Ní mór dúinn an dóchúlacht choinníollach don rang “Cócaire” agus don rang “Orduithe” a ríomh nuair a thugtar an t-ionchur x={Soiléir, Tráthnóna, Deireadh Seachtaine}. Is é an rang tuartha an ceann a bhfuil an dóchúlacht choinníollach is airde aige.
Tosaímid trí dhóchúlacht choinníollach an ranga “Cócaire” a ríomh:
Anois ríomhaimid gach dóchúlacht choinníollach leis féin:
Is é an dóchúlacht aimsire = “Soiléir” ós rud é gur “Cócaire” an rang ná líon na línte a bhfuil an aimsir “Soiléir” agus “Cócaire” ranga orthu thar líon iomlán na línte le rang “Cócaire”
Baineann an rud céanna leis na dóchúlachtaí coinníollach eile:
Anois le haghaidh na dóchúlachta P(Cooks) is é sin líon na línte a bhfuil “Cooks” ranga orthu thar líon iomlán na línte:
Anois ríomhaimid toradh na ndóchúlachtaí seo:
Ba é sin don rang “Cooks”, anois caithfimid an rud céanna a dhéanamh don rang “Orduithe”:
Ríomhaimid na dóchúlachtaí aonair:
Agus ar deireadh ríomhaimid táirge na dóchúlachta:
Ar deireadh, glacaimid an rang leis an dóchúlacht is airde, is é sin an rang “Cócaireáin”:
Buntáistí agus teorainneacha an algartam seo
Buntáistí:
-
Is aicmitheora an-tapa é.
-
Tá sé éasca a chur i bhfeidhm.
-
Níl aon chéim oiliúna ann, ach níl ann ach tátal.
-
Ní éilíonn sé go leor sonraí chun tátail a dhéanamh.
Teorainneacha:
- Glacann Naive Bayes leis go bhfuil na hathróga ionchuir neamhspleách, rud nach mbíonn fíor i gcónaí.
- Tá fadhb náid-minicíocht ag baint le Naive Bayes: is é an tráth a sannann sé dóchúlacht nialasach d’athróg ionchuir. Ní bhainfidh sé seo amach an dóchúlacht choinníollach go léir P(C|x). Cleas amháin chun é seo a sheachaint ná minicíocht íosta 1 ( in ionad 0 ) a úsáid i ngach athróg.
Aclaíocht
Seo é fráma sonraí an tacair sonraí céanna atá feicthe againn sa sampla.
Is é an tasc atá agat Naive Bayes a chur i bhfeidhm tú féin ag baint úsáide as python:
import pandas as pd
dataset = pd.DataFrame()
dataset['Weather'] = ['Clear', 'Cloudy', 'Rainy', 'Rainy', 'Cloudy', 'Clear', 'Snowy', 'Clear', 'Clear']
dataset['Time'] = ['Evening', 'Night', 'Night', 'Midday', 'Midday', 'Night', 'Evening', 'Night', 'Midnight']
dataset['Day'] = ['Weekend', 'Weekday', 'Weekday', 'Weekday', 'Weekend', 'Weekend', 'Weekend', 'Weekday', 'Weekend']
dataset['Class'] = ['Cooks', 'Orders', 'Orders', 'Orders', 'Cooks', 'Cooks', 'Orders', 'Cooks', 'Orders']
def naive_bayes(weather, time, day):
# res_dict = {class1: probability of class 1, class1: probability of class 1
return res_dict
Réiteach
def naive_bayes(x_weather, x_time, x_day):
TARGET = 'Dinner' # The name of the target variable
CLASSES = list(dataset['Dinner'].unique()) # The classes of the target variable
len_dataset = len(dataset) # The length of the dataset
res_dict = {} # res_dict = {class1:probability1, ..., class_n:probability_n}
# for each class of the target classes, we calculate the it's conditional probability
for class_name in CLASSES:
# the number of lines that belong to the class "class_name"
len_c = len(dataset[ (dataset[TARGET] == class_name) ])
# the number of lines that belong to the class "class_name" and have weather="x_weather"
n_weather = len(dataset[ (dataset[TARGET] == class_name) & (dataset['Weather'] == x_weather) ])
# the number of lines that belong to the class "class_name" and have time="x_time"
n_time = len(dataset[ (dataset[TARGET] == class_name) & (dataset['Time'] == x_time) ])
# the number of lines that belong to the class "class_name" and have day="x_day"
n_day = len(dataset[ (dataset[TARGET] == class_name) & (dataset['Day'] == x_day) ])
# We calculate the conditional probability:
# P(class|x) = P(weather|class) x P(time|class) x P(day|class) x P(class)
p = (n_weather / len_c) * (n_time / len_c) * (n_day / len_c) * (len_c / len_dataset) res_dict[class_name] = p
return res_dict