其中資料集:dataset.txt需要和本py檔案放到乙個檔案目錄
#_*_coding:utf-8_*_
import numpy as np
import operator
"""函式說明:knn演算法
parameters:
inx-用於分類的資料(測試集)
dataset - 用於訓練的資料
labels-分類標籤
k-knn演算法引數,選擇距離最小的k個點
returns:
sortedclasscount[0][0]
"""def
classfy0
(inx,dataset,labels,k)
:#numpy函式shape[0]返回dataset的行數
datasetsize = dataset.shape[0]
#在列向量方向上重複inx共1次(橫向),行向量方向上重複inx共datasetsize次(縱向)
diffmat = np.tile(inx,
(datasetsize,1)
)- dataset
#二維特徵相減之後求平方
sqdiffmat = diffmat **
2#sum()所有元素相加,sum(0):列相加,sum(1):行相加
sqdistances = sqdiffmat.
sum(axis=1)
distances = sqdistances **
0.5#返回distances中元素從小到大排序後的索引值
sorteddistances = distances.argsort(
)#定義乙個記錄類別次數的字典
classcount =
for i in
range
(k):
#取出前k個元素的類別
votelabels = labels[sorteddistances[i]
]#dict.get(key,default=none),字典的get()方法,返回指定鍵的值,如果值不在字典中則返回預設值
#計算類別次數
classcount[votelabels]
= classcount.get(votelabels,0)
+1#key=operator.itemgetter(1)根據字典的值進行排序
#key=operator.itemgetter(0)根據字典的鍵進行排序
sortedclasscount =
sorted
(classcount.items(
),key=operator.itemgetter(1)
,reverse=
true
)return sortedclasscount[0]
[0]"""
函式說明:開啟解析檔案,對資料進行分類:1代表不喜歡,2代表魅力一般,3代表極具魅力
parameter:
filename-檔名
returns:
returnmat-特徵矩陣
classlabelvector-分類器label向量
"""def
file2matrix
(filename)
:#開啟檔案
fr =
open
(filename)
#按行讀取檔案所有內容
arrayolines = fr.readlines(
)#得到檔案行數
numberoflines =
len(arrayolines)
#返回numpy矩陣,解析完成的資料:numberoflines行,3列
returnmat = np.zeros(
(numberoflines,3)
)#返回分類標籤向量
classlabelvector =
#行的索引
index=
0for line in arrayolines:
#s.strip(rm),當re空時,預設刪除空白符(包括'\n','\r』,\t』)
line = line.strip(
)#s.split(str = "",num = string,cout(str))將字串根據『\t』分隔符進行切片
listfromline = line.split(
'\t'
)#將資料前三列提取出來,存放到returnmat的np矩陣中,也就是特徵矩陣
returnmat[index,:]
= listfromline[0:
3]#根據文字中的標記的喜歡的程度進行分類。
if listfromline[-1
]=='didntlike':1
)elif listfromline[-1
]=='smalldoses':2
)elif listfromline[-1
]=='largedoses':3
) index+=
1return returnmat,classlabelvector
"""函式說明:對資料進行歸一化
parameters:
dataset-特徵矩陣
returns:
normdataset-歸一化後的特徵矩陣
ranges-資料範圍
minvals-資料最小值
"""def
autonorm
(dataset)
:#獲取資料的最小值
minvals = dataset.
min(
) maxvals = dataset.
max(
) ranges = maxvals - minvals
normdataset = np.zeros(np.shape(dataset)
) m = dataset.shape[0]
normdataset = dataset - np.tile(minvals,
(m,1))
normdataset = normdataset / np.tile(ranges,
(m,1))
return normdataset,ranges,minvals
"""通過輸入乙個三維特徵,進行分類輸出
"""def
classfyperson()
: resultlist =
['討厭'
,'有些喜歡'
,'非常喜歡'
]#三維特徵使用者輸入
precenttats =
float
(input()
) ffmiles =
float
(input
("每年獲得的飛行常客里程數:"))
icecream =
float
(input
("每週消費的冰激凌公升數:"))
filename =
"datingtestset.txt"
datingdatamat,datinglabels = file2matrix(filename)
normmat,ranges,minvals = autonorm(datingdatamat)
inarr = np.array(
[ffmiles,precenttats,icecream]
) norminarr =
(inarr - minvals)
/ ranges
classfierresult = classfy0(norminarr,normmat,datinglabels,3)
print
("你可能%s這個人"
%(resultlist[classfierresult -1]
))if __name__ ==
'__main__'
: classfyperson(
)
每日打卡 Day8 密碼問題 C 實現
網上流傳一句話 常在網上飄啊,哪能不挨刀啊 其實要想能安安心心地上網其實也不難,學點安全知識就可以。首先,我們就要設定乙個安全的密碼。那什麼樣的密碼才叫安全的呢?一般來說乙個比較安全的密碼至少應該滿足下面兩個條件 1 密碼長度大於等於8,且不要超過16。2 密碼中的字元應該來自下面 字元類別 中四組...
洛谷打卡Day 8
題目描述 這次期末考試,kkksc03 需要考 4 科。因此要開始刷習題集,每科都有乙個習題集,分別有 s1,s2,s3,s4道題目,完成每道題目需要一些時間,可能不等 a1,a2,b1,b2,bs,c1,c2,cs,d1,d2,ds kkksc03 有乙個能力,他的左右兩個大腦可以同時計算 2 道...
每日打卡 Day21 單詞搜尋 C 實現
給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。示例 board a b c e s f c s a d e e 給定 word abcced 返回 ...