tile的使用方法
tile(a,n)的功能是把a陣列重複n次(可以在列方向,也可以在行方向)
argsort()函式
argsort()函式返回的是陣列中值從大到小的索引值
dict.get()函式
語法:dict.get(key, default=none)
key----字典中要查詢的鍵
default----如果指定的簡直不存在時,返回該預設值
add_subplot()基礎用法
import matplotlib.pyplot as plt
from numpy import *
fig = plt.figure()
ax = fig.add_subplot(349)
ax.plot(x,y)
將畫布分成三行四列,在第九個分割槽畫圖
from numpy import *
from os import listdir
import operator
def createdataset():
group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
labels = ['a', 'a', 'b', 'b']
return group, labels
# 對資料進行分類
def classify0(inx, dataset, labels, k):
datasetsize = dataset.shape[0] #shape[0]獲取第一維的數目
diffmat = tile(inx, (datasetsize, 1)) - dataset # tile??????
sqdiffmat = diffmat**2
# 求差的平方和
sqdistance = sqdiffmat.sum(axis=1) #axis=1???????sum函式預設是axis=0列元素相加,axis=1是一行的元素求和
# 求標準差
distances = sqdistance**0.5
# 距離排序
sortdistindicies = distances.argsort() #argsort函式返回的是陣列值從小到大的索引值
# 定義元字典
classcount = {}
for i in range(k):
# 獲得前k個元素的標籤
voteilabel = labels[sortdistindicies[i]]
# 計算前k個資料標籤出現的次數
classcount[voteilabel] = classcount.get(voteilabel,0) + 1 #dict.get()???????????
sortedclasscount = sorted(classcount.items(),key = operator.itemgetter(1), reverse=true)
return sortedclasscount[0][0]
# 讀取文字檔案資料
def file2matrix(filename):
fr = open(filename)
lines = fr.readlines()
num_lines = len(lines)
train_matrix = zeros((num_lines, 3))
label_vector =
index = 0
for line in lines:
line = line.strip()
line_list = line.split('\t')
train_matrix[index, :] = line_list[0:3] # 獲取列表的前0,1,2列
index += 1
return train_matrix, label_vector # add_subplot????????????????
#歸一化函式
def autonorm(dataset):
minvals = dataset.min(0)
maxvals = dataset.max(0)
ranges = maxvals - minvals
# normdataset = zeros(shape(dataset))
m = dataset.shape[0]
normdataset = dataset - tile(minvals, (m, 1)) # minvals在列上重複一次(本身),在行上重複m次,從而形成m*3的向量
normdataset = normdataset/tile(ranges, (m, 1))
return normdataset, ranges, minvals # 歸一化後的資料, 極差範圍, 最小值
# 分類器測試函式
def datingclasstest():
horatio = 0.10 #測試集比例
datingdatamat, datinglabels = file2matrix('datingtestset2.txt')
normmat, ranges, minvals = autonorm(datingdatamat)
m = normmat.shape[0]
numtestvecs = int(m*horatio)
errcount = 0.0
for i in range(numtestvecs):
classifierresult = classify0(normmat[i, :], normmat[numtestvecs:m, :], datinglabels[numtestvecs:m], 2)
print("the classifier came back with :%d ,the real answer is :%d" % (classifierresult, datinglabels[i]))
if(classifierresult != datinglabels[i]):
errcount += 1.0
print("the total error rate is: %f" %(errcount/float(numtestvecs)))
# 手寫字元檔案轉換成向量
def img2vector(filename):
returnvect = zeros((1, 1024))
fr = open(filename)
for i in range(32):
linestr = fr.readline()
for j in range(32):
returnvect[0, 32*i+j] = int(linestr[j])
return returnvect
# 手寫字元識別測試
def handwritingclasstest():
hwlabels = # 定義手寫字元標籤
trainingfilelist = listdir('digits/trainingdigits')
m = len(trainingfilelist)
trainingmat = zeros((m, 1024))
for i in range(m):
filenamestr = trainingfilelist[i]
filestr = filenamestr.split('.')[0]
classnumstr = filestr.split('_')[0]
# 把檔案變成向量並賦值到trainingmat
trainingmat[i, :] = img2vector('digits/trainingdigits/%s' % filenamestr)
testfilelist = listdir('digits/testdigits')
errcount = 0.0
mtest = len(testfilelist)
for i in range(mtest):
filenamestr = testfilelist[i]
filestr = filenamestr.split('.')[0]
classnumstr = int(filestr.split('_')[0])
vectorundertest = img2vector('digits/testdigits/%s' % filenamestr)
classifierresult = classify0(vectorundertest, trainingmat, hwlabels, 3)
print('the classifier came back with : %d, the real answer is %d' % (int(classifierresult), classnumstr))
if(int(classifierresult) != int(classnumstr)):
errcount += 1
print('\nthe total number of errors is %d' % errcount)
print('\nthe total error rate is: %f' % float(errcount/mtest))
《機器學習實戰》 第二章KNN
knn演算法是基本的機器學習方法,其原理很簡單 如果乙個例項在特徵空間中的k個最相似 即特徵空間中最近鄰 的例項中的大多數屬於某乙個類別,則該例項也屬於這個類別。其實際上是選擇k個最可能的樣本進行投票,這和k means尋找k個幾何中心點進行聚類是不同的.如下圖所示 有兩種型別的樣本資料,一類是藍色...
機器學習實戰 第二章 K 近鄰演算法
本系列目的在於總結每乙個分類器的特點 優點 缺點 使用資料型別 使用時的注意事項等 相關 自己搜。python 建議使用2.7 python常用函式庫 numpy scikit learn等 python整合環境 anaconda 優點 1 對異常值不敏感 2 無資料輸入假設 缺點 1 計算複雜度高...
機器學習實戰 第二章KNN中的一些問題
第一 書中file2matrix函式可能無法通過編譯。函式如下 def file2matrix filename fr open filename arrayolines fr.readlines numberoflines len arrayolines returnmat zeros numbe...