Python-Implementierung des Naive-Bayes-Algorithmus
Vor- und Nachteile des Algorithmus
Vorteile: Immer noch effektiv, wenn weniger Daten vorhanden sind, kann Probleme mit mehreren Kategorien bewältigen
Nachteile: Empfindlich gegenüber der Art und Weise, wie Eingabedaten vorbereitet werden
Anwendbarer Datentyp: Nominaldaten
Algorithmusidee:
Naive Bayes
Wenn wir beispielsweise feststellen möchten, ob eine E-Mail Spam ist, was wissen wir dann? ist das Die Verteilung von Wörtern in E-Mails, dann müssen wir auch wissen: die Häufigkeit bestimmter Wörter in Spam-E-Mails, die mithilfe des Bayes-Theorems ermittelt werden können.
Eine Annahme im Naive Bayes-Klassifikator ist, dass jedes Merkmal gleich wichtig ist
Bayes'sche Klassifikation ist der allgemeine Begriff für eine Klasse von Klassifikationsalgorithmen, die alle auf dem Satz von Bayes als Grundlage basieren , wird sie zusammenfassend als Bayes'sche Klassifikation bezeichnet.
Funktion
loadDataSet()
erstellt einen Datensatz, der aus aufgeteilten Wörtern besteht und Benutzerkommentare in einem Forum darstellt. Tag 1 bedeutet, dass dies ein Fluch ist
createVocabList(dataSet)
Finden Sie heraus, wie viele Wörter diese Sätze insgesamt enthalten, um die Größe unserer Wortvektoren zu bestimmen
setOfWords2Vec (vocabList, inputSet)
Konvertieren Sie den Satz basierend auf den darin enthaltenen Wörtern in einen Vektor. Das Bernoulli-Modell wird hier verwendet, dh nur, ob das Wort existiert
bagOfWords2VecMN(vocabList, inputSet )
Dies ist ein weiteres Modell, das Sätze in Vektoren umwandelt, ein Polynommodell, das die Häufigkeit des Vorkommens eines bestimmten Wortes berücksichtigt
trainNB0(trainMatrix,trainCatergory)
Berechnen Sie P (i) und P (w[i]|C[1]) und P(w[i]|C[0]), hier gibt es zwei Tricks. Einer ist, dass der Startzähler und der Nenner nicht alle auf 0 initialisiert werden Um zu verhindern, dass die Wahrscheinlichkeit, dass einer von ihnen 0 ist, der Gesamtwert 0 ist, und der andere, wird später der multiplikative Logarithmus verwendet, um zu verhindern, dass das Ergebnis aufgrund von Genauigkeitsproblemen 0 ist
classifyNB(vec2Classify, p0Vec, p1Vec, pClass1)
Berechnen Sie dies gemäß der Bayes'schen Formel. Welche der beiden Mengen hat eine höhere Wahrscheinlichkeit, dass der Vektor zu
#coding=utf-8 from numpy import * def loadDataSet(): postingList=[['my', 'dog', 'has', 'flea', 'problems', 'help', 'please'], ['maybe', 'not', 'take', 'him', 'to', 'dog', 'park', 'stupid'], ['my', 'dalmation', 'is', 'so', 'cute', 'I', 'love', 'him'], ['stop', 'posting', 'stupid', 'worthless', 'garbage'], ['mr', 'licks', 'ate', 'my', 'steak', 'how', 'to', 'stop', 'him'], ['quit', 'buying', 'worthless', 'dog', 'food', 'stupid']] classVec = [0,1,0,1,0,1] #1 is abusive, 0 not return postingList,classVec #创建一个带有所有单词的列表 def createVocabList(dataSet): vocabSet = set([]) for document in dataSet: vocabSet = vocabSet | set(document) return list(vocabSet) def setOfWords2Vec(vocabList, inputSet): retVocabList = [0] * len(vocabList) for word in inputSet: if word in vocabList: retVocabList[vocabList.index(word)] = 1 else: print 'word ',word ,'not in dict' return retVocabList #另一种模型 def bagOfWords2VecMN(vocabList, inputSet): returnVec = [0]*len(vocabList) for word in inputSet: if word in vocabList: returnVec[vocabList.index(word)] += 1 return returnVec def trainNB0(trainMatrix,trainCatergory): numTrainDoc = len(trainMatrix) numWords = len(trainMatrix[0]) pAbusive = sum(trainCatergory)/float(numTrainDoc) #防止多个概率的成绩当中的一个为0 p0Num = ones(numWords) p1Num = ones(numWords) p0Denom = 2.0 p1Denom = 2.0 for i in range(numTrainDoc): if trainCatergory[i] == 1: p1Num +=trainMatrix[i] p1Denom += sum(trainMatrix[i]) else: p0Num +=trainMatrix[i] p0Denom += sum(trainMatrix[i]) p1Vect = log(p1Num/p1Denom)#处于精度的考虑,否则很可能到限归零 p0Vect = log(p0Num/p0Denom) return p0Vect,p1Vect,pAbusive def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1): p1 = sum(vec2Classify * p1Vec) + log(pClass1) #element-wise mult p0 = sum(vec2Classify * p0Vec) + log(1.0 - pClass1) if p1 > p0: return 1 else: return 0 def testingNB(): listOPosts,listClasses = loadDataSet() myVocabList = createVocabList(listOPosts) trainMat=[] for postinDoc in listOPosts: trainMat.append(setOfWords2Vec(myVocabList, postinDoc)) p0V,p1V,pAb = trainNB0(array(trainMat),array(listClasses)) testEntry = ['love', 'my', 'dalmation'] thisDoc = array(setOfWords2Vec(myVocabList, testEntry)) print testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb) testEntry = ['stupid', 'garbage'] thisDoc = array(setOfWords2Vec(myVocabList, testEntry)) print testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb) def main(): testingNB() if __name__ == '__main__': main()

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Viele Website -Entwickler stehen vor dem Problem der Integration von Node.js oder Python Services unter der Lampenarchitektur: Die vorhandene Lampe (Linux Apache MySQL PHP) Architekturwebsite benötigt ...

Bei der Verwendung von Scapy Crawler kann der Grund, warum Pipeline persistente Speicherdateien nicht geschrieben werden kann? Diskussion beim Lernen, Scapy Crawler für Data Crawler zu verwenden, begegnen Sie häufig auf eine ...

Python Process Pool verarbeitet gleichzeitige TCP -Anfragen, die dazu führen, dass der Client stecken bleibt. Bei der Verwendung von Python für die Netzwerkprogrammierung ist es entscheidend, gleichzeitige TCP -Anforderungen effizient zu verarbeiten. ...

Erforschen Sie tief die Betrachtungsmethode von Python Functools.Partialial Object in functools.Partial mit Python ...

Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Auswahl der Python-plattformübergreifenden Desktop-Anwendungsentwicklungsbibliothek Viele Python-Entwickler möchten Desktop-Anwendungen entwickeln, die sowohl auf Windows- als auch auf Linux-Systemen ausgeführt werden können ...

Erste Schritte mit Python: Hourglas -Grafikzeichnung und Eingabeüberprüfung In diesem Artikel wird das Problem der Variablendefinition gelöst, das von einem Python -Anfänger im Hourglass -Grafikzeichnungsprogramm auftritt. Code...

Datenkonvertierung und Statistik: Effiziente Verarbeitung großer Datensätze In diesem Artikel werden ausführlich das Umwandeln einer Datenliste in eine andere enthält ...
