1. 程式人生 > >Python實現樸素貝葉斯演算法 --- 遮蔽社群留言板的侮辱性言論

Python實現樸素貝葉斯演算法 --- 遮蔽社群留言板的侮辱性言論

# -*- coding:utf-8 -*-
import numpy as np
__author__ = 'yangxin'
"""
貝葉斯公式
p(xy)=p(x|y)p(y)=p(y|x)p(x)
p(x|y)=p(y|x)p(x)/p(y)
"""

"""
遮蔽社群留言板的侮辱性言論
"""


class SpeechJudgment(object):

    def load_data_set(self):
        # 單詞列表
        posting_list = [
            ['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', 'gar e'],
            ['mr', 'licks', 'ate', 'my', 'steak', 'how', 'to', 'stop', 'him'],
            ['quit', 'buying', 'worthless', 'dog', 'food', 'stupid']]
        # 屬性類別列表 1 -> 侮辱性的文字, 0 -> not
        class_vec = [0, 1, 0, 1, 0, 1]
        return posting_list, class_vec

    def create_vocab_list(self, data_set):
        vocab_set = set()
        for item in data_set:
            vocab_set = vocab_set | set(item)
        # 不含重複元素的單詞列表
        return list(vocab_set)

    def set_of_words2vec(self, vocab_list, input_set):
        result = [0] * len(vocab_list)
        for word in input_set:
            if word in vocab_list:
                # 如單詞在輸入文件出現過,則標記為1,否則為0
                result[vocab_list.index(word)] = 1
        return result

    def train_naive_bayes(self, train_mat, train_category):
        train_doc_num = len(train_mat)
        words_num = len(train_mat[0])
        pos_abusive = np.sum(train_category) / train_doc_num
        # 建立一個長度為words_num的都是1的列表
        p0num = np.ones(words_num)
        p1num = np.ones(words_num)
        p0num_all = 2.0
        p1num_all = 2.0
        for i in range(train_doc_num):
            if train_category[i] == 1:
                p1num += train_mat[i]
                p1num_all += np.sum(train_mat[i])
            else:
                p0num += train_mat[i]
                p0num_all += np.sum(train_mat[i])
        p1vec = np.log(p1num / p1num_all)
        p0vec = np.log(p0num / p0num_all)
        return p0vec, p1vec, pos_abusive

    def classify_naive_bayes(self, vec_to_classify, p0vec, p1vec, p_class1):
        p1 = np.sum(vec_to_classify * p1vec) + np.log(p_class1)
        p0 = np.sum(vec_to_classify * p0vec) + np.log(1 - p_class1)
        if p1 > p0:
            return 1
        else:
            return 0

    def bag_words_to_vec(self, vocab_list, input_set):
        result = [0] * len(vocab_list)
        for word in input_set:
            if word in vocab_list:
                result[vocab_list.index(word)] += 1
            else:
                print('the word: {} is not in my vocabulary'.format(word))
        return result


    def testing_naive_bayes(self):
        list_post, list_classes = self.load_data_set()
        vocab_list = self.create_vocab_list(list_post)
        train_mat = []
        for post_in in list_post:
            train_mat.append(
                self.set_of_words_to_vec(vocab_list, post_in)
            )
        p0v, p1v, p_abusive = self.train_naive_bayes(np.array(train_mat), np.array(list_classes))
        test_one = ['love', 'my', 'dalmation']
        test_one_doc = np.array(self.set_of_words2vec(vocab_list, test_one))
        print('the result is: {}'.format(self.classify_naive_bayes(test_one_doc, p0v, p1v, p_abusive)))
        test_two = ['stupid', 'garbage']
        test_two_doc = np.array(self.set_of_words2vec(vocab_list, test_two))
        print('the result is: {}'.format(self.classify_naive_bayes(test_two_doc, p0v, p1v, p_abusive)))

相關推薦

Python實現樸素演算法 --- 遮蔽社群留言侮辱性言論

# -*- coding:utf-8 -*- import numpy as np __author__ = 'yangxin' """ 貝葉斯公式 p(xy)=p(x|y)p(y)=p(y|x)p(x) p(x|y)=p(y|x)p(x)/p(y) """ """ 遮蔽社

Python實現樸素演算法 --- 過濾垃圾郵件

# -*- coding:utf-8 -*- import numpy as np import random import re __author__ = 'yangxin' """ 過濾垃圾郵件 """ class FilterSpam(object): #

Python 實現樸素 MNIST資料集

Python實現樸素貝葉斯演算法 樸素貝葉斯是機器學習的一種演算法,之所以成為樸素,是因為它的想法“簡單”,簡單地認為樣本中所有的特徵都無關,即P(AB) = P(A)P(B)。所以,有 P(y|xi) = P(y)P(x0 = xi0|y)P(x1 = xi1|y)P(x2 = x

【機器學習實踐】用Python實現樸素分類器

       閱讀學習了《機器學習》第7章的貝葉斯分類器後,為了加深理解和加強python的程式碼能力,因此嘗試使用Python實現樸素貝葉斯分類器,由於初學Python的緣故,程式碼的一些實現方法可能比較繁瑣,可閱讀性有待提高。程式碼如下: #import numpy a

Python--基於樸素演算法的情感分類

環境 win8, python3.7, jupyter notebook 正文 什麼是情感分析?(以下引用百度百科定義) 情感分析(Sentiment analysis),又稱傾向性分析,意見抽取(Opinion extraction),意見挖掘(Opinion mining),情感挖掘(Sentiment

機器學習及python實現——樸素分類器

問題引入 考慮構建一個垃圾郵件分類器,通過給定的垃圾郵件和非垃圾郵件的資料集,通過機器學習構建一個預測一個新的郵件是否是垃圾郵件的分類器。郵件分類器是通常的文字分類器中的一種。 樸素貝葉斯方法 貝葉斯假設 假設當前我們已經擁有了一批標識有是垃圾郵

Python實現樸素(NB)

      這篇文章主要關於樸素貝葉斯演算法的用python具體實現,網上關於NB演算法的文章很多,大多圍繞著《機器學習實戰》這本書來著。在此,對於NB演算法的原理我大概介紹一下。 貝葉斯定理:     已知某條件概率,如何得到兩個條件交換後的概率。即:已知 求 假設

Python實現樸素分類器

# -*-coding:utf-8-*- '''     樸素貝葉斯演算法 ''' from __future__ import division  global className className = "class" def calc_class(trai

關於Java實現樸素演算法

package naiveBayesian; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStr

機器學習——樸素演算法Python實現

簡介 這裡參考《統計學習方法》李航編進行學習總結。詳細演算法介紹參見書籍,這裡只說明關鍵內容。 即 條件獨立下:p{X=x|Y=y}=p{X1=x1|Y=y} * p{X2=x2|Y=y} *...* p{Xn=xn|Y=y} (4.4)等價於p{Y=ck|X=x

樸素演算法python實現

import numpy as np import re #詞表到向量的轉換函式 def loadDataSet(): postingList = [['my', 'dog', 'has', 'flea', 'problems', 'help', 'please']

樸素演算法python實現

樸素貝葉斯是一種十分簡單的分類演算法,稱其樸素是因為其思想基礎的簡單性,就文字分類而言,他認為詞袋中的兩兩詞之間的關係是相互獨立的,即一個物件的特徵向量中的每個維度都是互相獨立的。這是樸素貝葉斯理論的思想基礎。 樸素貝葉斯分類的正式定義: 設x={}為一個待分類項,而每個a為x的一個特徵屬性有類別集合C={

樸素演算法python實現 統計學習方法例4.2實戰

 本人在自學李航老師的統計學習方法,在學習樸素貝葉斯章節時,其中概念非常好理解,但是準備想把課本中的例題實戰一下時卻犯了難,有點無從下手的感覺,主要是因為怎麼去合理的去寫,提高程式碼的適應性以及重複利用率。  在網上找了蠻多部落格,大部分都是是判斷情感詞等,其中有篇部落

樸素演算法(Naive Bayes)演算法python實現 含原始碼

演算法原理不在贅述,請參考: 將程式碼儲存為.py格式,預設使用的資料是程式碼檔案所在目錄下data目錄下的 bayes_train.txt 和bayes_test.txt 兩個檔案分別作為訓練樣例和測試樣例。以上引數可以在原始碼中修改,也可以使用命令列引數傳入,參考以

樸素演算法Python的簡單實現

     貝葉斯演算法起源於古典數學理論,是一種分類演算法的總稱。它以貝葉斯定理為基礎,假設某待分類的樣本滿足某種概率分佈,並且可以根據已觀察到的樣本資料對該樣本進行概率計算,以得出最優的分類決策。通過計算已觀察到的樣本資料估計某待分類樣本的先驗概率,利用貝葉斯公式計算出其後

樸素演算法 Python實現

本程式碼實現了樸素貝葉斯分類器(假設了條件獨立的版本),常用於垃圾郵件分類,進行了拉普拉斯平滑關於樸素貝葉斯演算法原理可以參考部落格中原理部分的博文。#!/usr/bin/python # -*- coding: utf-8 -*- from math import log

Python Scikit-learn 實現機器學習十大演算法--樸素演算法(文末有程式碼)

  1,前言 很久不發文章,主要是Copy別人的總感覺有些不爽,所以整理些乾貨,希望相互學習吧。不囉嗦,進入主題吧,本文主要時說的為樸素貝葉斯分類演算法。與邏輯迴歸,決策樹一樣,是較為廣泛使用的有監督分類演算法,簡單且易於理解(號稱十大資料探勘演算法中最簡單的演算法)。但

樸素演算法的程式碼例項實現python

本文由本人原創,僅作為自己的學習記錄 資料:假設下面是課程資料,課程資料分為,價格A,課時B,銷量C 價格A 課時B 銷量C 低 多 高 高 中 高 低 少 高 低 中 低 中 中

小白python學習——機器學習篇——樸素演算法

一.大概思路: 1.找出資料集合,所有一個單詞的集合,不重複,各個文件。 2.把每個文件換成0,1模型,出現的是1,就可以得到矩陣長度一樣的各個文件。 3.計算出3個概率,一是侮辱性的文件概率,二是侮辱性文件中各個詞出現的概率,三是非侮辱性文件中各個詞出現的概率。 4.二、三計算方法

樸素演算法優化與 sklearn 實現

1. 引言 上一篇日誌中,我們主要介紹了貝葉斯演算法,並提供了 python 實踐: 樸素貝葉斯演算法的推導與實踐 但執行上一篇日誌中的示例,我們發現出現了下面的結果: ['love', 'my', 'dalmation'] 屬於非侮辱類 ['stu