国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python K近鄰算法的kd樹實現

2020-02-15 22:56:02
字體:
來源:轉載
供稿:網友

k近鄰算法的介紹

k近鄰算法是一種基本的分類和回歸方法,這里只實現分類的k近鄰算法。

k近鄰算法的輸入為實例的特征向量,對應特征空間的點;輸出為實例的類別,可以取多類。

k近鄰算法不具有顯式的學習過程,實際上k近鄰算法是利用訓練數據集對特征向量空間進行劃分。將劃分的空間模型作為其分類模型。

k近鄰算法的三要素

k值的選擇:即分類決策時選擇k個最近鄰實例; 距離度量:即預測實例點和訓練實例點間的距離,一般使用L2距離即歐氏距離; 分類決策規則。

下面對三要素進行一下說明:

1.歐氏距離即歐幾里得距離,高中數學中用來計算點和點間的距離公式;

2.k值選擇:k值選擇會對k近鄰法結果產生重大影響,如果選擇較小的k值,相當于在較小的鄰域中訓練實例進行預測,這樣有點是“近似誤差”會減小,即只與輸入實例較近(相似)的訓練實例才會起作用,缺點是“估計誤差”會增大,即對近鄰的實例點很敏感。而k值過大則相反。實際中取較小的k值通過交叉驗證的方法取最優k值。

3.k近鄰法的分類決策規則往往采用多數表決的方式,這等價于“經驗風險最小化”。

k近鄰算法的實現:kd樹

實現k近鄰法是要考慮的主要問題是如何退訓練數據進行快速的k近鄰搜索,當訓練實例數很大是顯然通過一般的線性搜索方式效率低下,因此為了提高搜索效率,需要構造特殊的數據結構對訓練實例進行存儲。kd樹就是一種不錯的數據結構,可以大大提高搜索效率。

本質商kd樹是對k維空間的一個劃分,構造kd樹相當與使用垂直于坐標軸的超平面將k維空間進行切分,構造一系列的超矩形,kd樹的每一個結點對應一個這樣的超矩形。

kd樹本質上是一棵二叉樹,當通過一定規則構造是他是平衡的。

下面是過早kd樹的算法:

開始:構造根結點,根節點對應包含所有訓練實例的k為空間。 選擇第1維為坐標軸,以所有訓練實例的第一維數據的中位數為切分點,將根結點對應的超矩形切分為兩個子區域。由根結點生成深度為1的左右子結點,左結點對應第一維坐標小于切分點的子區域,右子結點對應第一位坐標大于切分點的子區域。 重復:對深度為j的結點選擇第l維為切分坐標軸,l=j(modk)+1,以該區域中所有訓練實例的第l維的中位數為切分點,重復第一步。 直到兩個子區域沒有實例存在時停止。形成kd樹。

以下是kd樹的python實現

準備工作

#讀取數據準備def file2matrix(filename):  fr = open(filename)  returnMat = []     #樣本數據矩陣  for line in fr.readlines():    line = line.strip().split('/t')    returnMat.append([float(line[0]),float(line[1]),float(line[2]),float(line[3])])  return returnMat  #將數據歸一化,避免數據各維度間的差異過大def autoNorm(data):  #將data數據和類別拆分  data,label = np.split(data,[3],axis=1)  minVals = data.min(0)   #data各列的最大值  maxVals = data.max(0)    #data各列的最小值  ranges = maxVals - minVals  normDataSet = np.zeros(np.shape(data))  m = data.shape[0]  #tile函數將變量內容復制成輸入矩陣同樣大小的矩陣  normDataSet = data - np.tile(minVals,(m,1))      normDataSet = normDataSet/np.tile(ranges,(m,1))  #拼接  normDataSet = np.hstack((normDataSet,label))  return normDataSet            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洛宁县| 靖江市| 余江县| 方城县| 漳州市| 怀来县| 清苑县| 长治县| 合川市| 甘南县| 岑溪市| 米泉市| 盘山县| 阿尔山市| 正定县| 瑞金市| 海林市| 博客| 关岭| 哈密市| 蓝山县| 饶河县| 焦作市| 徐水县| 扬中市| 无棣县| 前郭尔| 无锡市| 湄潭县| 曲沃县| 乳山市| 基隆市| 乌拉特前旗| 松原市| 赣榆县| 镇原县| 长葛市| 渭南市| 古浪县| 洪泽县| 江西省|