NPL實踐系列 4 傳統機器學習

2021-09-12 07:38:13 字數 3156 閱讀 1996

原理

基於樸素貝葉斯公式,比較出後驗概率的最大值來進行分類,後驗概率的計算是由先驗概率與類條件概率的乘積得出,先驗概率和類條件概率要通過訓練資料集得出,即為樸素貝葉斯分類模型,將其儲存為中間結果,測試文件進行分類時呼叫這個中間結果得出後驗概率。

模型和訓練

樸素貝葉斯分類器是一種有監督學習,常見有三種模型,多項式模型(multinomial model)即為詞頻型和伯努利模型(bernoulli model)即文件型,以及高斯模型。

前二者的計算粒度不一樣,多項式模型以單詞為粒度,伯努利模型以檔案為粒度,因此二者的先驗概率和類條件概率的計算方法都不同。計算後驗概率時,對於乙個文件d,多項式模型中,只有在d**現過的單詞,才會參與後驗概率計算,伯努利模型中,沒有在d**現,但是在全域性單詞表**現的單詞,也會參與計算,不過是作為「反方」參與的。

這裡暫不考慮特徵抽取、為避免消除測試文件時類條件概率中有為0現象而做的取對數等問題。

使用的是sklearn.*****_bayes中的高斯模型:
from sklearn import metrics

from sklearn.*****_bayes import gaussiannb

from sklearn.model_selection import train_test_split

from sklearn.preprocessing import minmaxscaler

# 讀取資料

x =

y =

fr = open("teatdata.txt")

index = 0

for line in fr.readlines():

line = line.strip()

line = line.split('\t')

#歸一化

scaler = minmaxscaler()

x = scaler.fit_transform(x)

# 交叉分類

train_x,test_x, train_y, test_y = train_test_split(x,

y,test_size=0.2) # test_size:測試集比例20%

# knn模型,選擇3個鄰居

model = gaussiannb()

model.fit(train_x, train_y)

print(model)

expected = test_y

predicted = model.predict(test_x)

print(metrics.classification_report(expected, predicted)) # 輸出分類資訊

label = list(set(y)) # 去重複,得到標籤類別

print(metrics.confusion_matrix(expected, predicted, labels=label)) # 輸出混淆矩陣資訊

原理:

svm(support vector mac)又稱為支援向量機,是一種二分類的模型。當然如果進行修改之後也是可以用於多類別問題的分類。支援向量機可以分為線性核非線性兩大類。其主要思想為找到空間中的乙個更夠將所有資料樣本劃開的超平面,並且使得本集中所有資料到這個超平面的距離最短。svm(support vector mac)又稱為支援向量機,是一種二分類的模型。當然如果進行修改之後也是可以用於多類別問題的分類。支援向量機可以分為線性核非線性兩大類。其主要思想為找到空間中的乙個更夠將所有資料樣本劃開的超平面,並且使得本集中所有資料到這個超平面的距離最短。

模型svm有三種模型

# encoding=utf-8

import time

import numpy as np

import pandas as pd

from sklearn.cross_validation import train_test_split

from sklearn.metrics import accuracy_score

from sklearn import datasets

from sklearn import svm

if __name__ == '__main__':

print('prepare datasets...')

# iris資料集

# iris=datasets.load_iris()

# features=iris.data

# labels=iris.target

# minst資料集

raw_data = pd.read_csv('../data/train_binary.csv', header=0)

data = raw_data.values

features = data[::, 1::]

labels = data[::, 0] # 選取33%資料作為測試集,剩餘為訓練集

train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size=0.33, random_state=0)

time_2=time.time()

print('start training...')

clf = svm.svc() # svm class

clf.fit(train_features, train_labels) # training the svc model

time_3 = time.time()

print('training cost %f seconds' % (time_3 - time_2))

print('start predicting...')

test_predict=clf.predict(test_features)

time_4 = time.time()

print('predicting cost %f seconds' % (time_4 - time_3))

score = accuracy_score(test_labels, test_predict)

print("the accruacy score is %f" % score)

傳統機器學習

列1 列2 機器學習 方法 模型評估與選擇 效能度量 偏差與方差 線性模型 線性回歸 邏輯回歸 決策樹 資訊增益 剪枝 c4.5 神經網路 svm 對偶問題 核方法 貝葉斯分類器 極大似然估計 em演算法 整合學習 boosting bagging與隨機森林 深度森林 聚類 降維 k 近鄰 pca ...

機器學習實踐系列 一 普通線性回歸

this blog is based on sklearn dataset,i.e.diabetes.build a linear regression model.import numpy as np from sklearn.utils import shuffle import matplot...

傳統機器學習和深度學習

托馬斯 貝葉斯 thomas bayes 同學的詳細生平在這裡。以下摘一段 wikipedia 上的簡介 所謂的貝葉斯方法源於他生前為解決乙個 逆概 問題寫的一篇文章,而這篇文章是在他死後才由他的一位朋友發表出來的。在貝葉斯寫這篇文章之前,人們已經能夠計算 正向概率 如 假設袋子裡面有n個白球,m個...