chapter5:分類的進一步探討---演算法評估及kNN
一、10折交叉驗證(10-fold cross validation)
將資料集隨機分成10份,使用其中9份進行訓練而將另外1份用作測試。該過程可以重複10次,每次使用的測試資料不同
二、留一法(Leave-One-Out)
在機器學習領域,n折交叉驗證(n是資料集中樣本的數目)被稱為留一法。
它的一個優點是每次迭代中都使用了最大可能數目的樣本來訓練。
另一個優點是該方法具有確定性
因為10折交叉驗證中隨機將資料分到桶中,而留一法是確定性的
主要一個不足在於計算的開銷很大
另一個缺點與分層取樣(stratification)有關
三、分層取樣
10折交叉驗證期望每份資料中例項比例按照其在整個資料集的相同比例,而留一法評估的問題在於測試集中只有一個樣本,因此它肯定不是分層取樣的結果。
總而言之,留一法可能適用於非常小的資料集,到目前為止10折交叉測試是最流行的選擇
四、混淆矩陣
精確率百分比的計算
五、一個程式設計的例子
汽車MPG資料集
利用分層取樣方法將資料分到10個桶中
# divide data into 10 buckets
import random
def buckets(filename, bucketName, separator, classColumn):
"""the original data is in the file named filename
bucketName is the prefix for all the bucket names
separator is the character that divides the columns
(for ex., a tab or comma and classColumn is the column
that indicates the class"""
# put the data in 10 buckets
numberOfBuckets = 10
data = {}
# first read in the data and divide by category
with open(filename) as f:
lines = f.readlines()
for line in lines:
if separator != '\t':
line = line.replace(separator, '\t')
# first get the category
category = line.split()[classColumn]
data.setdefault(category, [])
data[category].append(line)
# initialize the buckets
buckets = []
for i in range(numberOfBuckets):
buckets.append([])
# now for each category put the data into the buckets
for k in data.keys():
#randomize order of instances for each class
random.shuffle(data[k])
bNum = 0
# divide into buckets
for item in data[k]:
buckets[bNum].append(item)
bNum = (bNum + 1) % numberOfBuckets
# write to file
for bNum in range(numberOfBuckets):
f = open("%s-%02i" % (bucketName, bNum + 1), 'w')
for item in buckets[bNum]:
f.write(item)
f.close()
# example of how to use this code
buckets("pimaSmall.txt", 'pimaSmall',',',8)
六、Kappa統計量
“分類器到底好到什麼程度”
Kappa統計量比較的是分類器與僅僅基於隨機的分類器的效能。
七、近鄰演算法的改進
考察k個而不只是1個最近的鄰居(kNN)
八、一個新資料集也挑戰
皮馬印第安人糖尿病資料集(Pima Indians Diabetes Data Set),該資料集是美國國立糖尿病、消化和腎臟疾病研究所
每個例項表示一個超過21歲的女性的資訊,分兩類,即5年沒是否患過糖尿病。每個人有8個屬性
def knn(self, itemVector):
"""returns the predicted class of itemVector using k
Nearest Neighbors"""
# changed from min to heapq.nsmallest to get the
# k closest neighbors
neighbors = heapq.nsmallest(self.k,
[(self.manhattan(itemVector, item[1]), item)
for item in self.data])
# each neighbor gets a vote
results = {}
for neighbor in neighbors:
theClass = neighbor[1][0]
results.setdefault(theClass, 0)
results[theClass] += 1
resultList = sorted([(i[1], i[0]) for i in results.items()], reverse=True)
#get all the classes that have the maximum votes
maxVotes = resultList[0][0]
possibleAnswers = [i[1] for i in resultList if i[0] == maxVotes]
# randomly select one of the classes that received the max votes
answer = random.choice(possibleAnswers)
return( answer)
人們將kNN分類器用於:
相關文章
- 分類演算法的評估指標演算法指標
- KNN演算法——分類部分KNN演算法
- 最基礎的分類演算法(KNN)演算法KNN
- KNN 演算法-理論篇-如何給電影進行分類KNN演算法
- sklearn建模及評估(聚類)聚類
- 評估類、評估類別、評估級別關係
- 演算法實踐:KNN分類(day08)演算法KNN
- 評估指標與評分(上):二分類指標指標
- 資料探勘——KNN演算法(手寫數字分類)KNN演算法
- 六種GAN評估指標的綜合評估實驗,邁向定量評估GAN的重要一步指標
- 網路分流器-網路分流器-網路安全評估探討
- 分類模型的演算法效能評價模型演算法
- Support Vector Machines(SVM)如何根據虹膜分類評估性格類別?Mac
- 【引用】分割評估類的應用
- 深入探討 Room 2.4.0 的最新進展OOM
- 機器學習——最鄰近規則分類(K Nearest Neighbor)KNN演算法機器學習RESTKNN演算法
- 深入探討 Java 類載入器Java
- Java類、物件以及(靜態)方法的探討Java物件
- 機器學習——最鄰近規則分類(K Nearest Neighbor)KNN演算法的應用機器學習RESTKNN演算法
- 機器學習演算法-K近鄰(KNN)演算法(三):馬絞痛資料--kNN資料預處理+kNN分類pipeline(程式碼附詳細註釋)機器學習演算法KNN
- 機器學習分享——KNN演算法及numpy實現機器學習KNN演算法
- 資料探勘(7):分類演算法評價演算法
- NSOperation的進階使用和簡單探討
- NSThead的進階使用和簡單探討
- 03 ML KNN 實現的婚戀網站分類匹配KNN網站
- sklearn學習 第一篇:knn分類KNN
- KNN演算法KNN演算法
- 4.8 共識演算法的社會學探討演算法
- 一次分表踩坑實踐的探討
- MySQL准入規範及容量評估MySql
- 風險評估框架流程及分析原理框架
- 網路安全評估方式有哪些?為什麼要進行安全評估?
- Promise探討Promise
- 智慧網聯建設核心評價指標探討指標
- 關聯規則挖掘:Apriori演算法的深度探討演算法
- 企業ERP評估中財務與分銷系統評估措施(轉)
- 關於 Roguelike 的探討,及基於 Roguelike 的新框架框架
- 多標籤分類的結果評估---macro-average和micro-average介紹Mac