原理
基於樸素貝葉斯公式,比較出後驗概率的最大值來進行分類,後驗概率的計算是由先驗概率與類條件概率的乘積得出,先驗概率和類條件概率要通過訓練資料集得出,即為樸素貝葉斯分類模型,將其儲存為中間結果,測試文件進行分類時呼叫這個中間結果得出後驗概率。
模型和訓練
樸素貝葉斯分類器是一種有監督學習,常見有三種模型,多項式模型(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個...