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

首頁 > 編程 > Python > 正文

python機器學(xué)習(xí)案例教程——K最近鄰算法的實現(xiàn)

2020-02-16 11:20:49
字體:
供稿:網(wǎng)友

K最近鄰屬于一種分類算法,他的解釋最容易,近朱者赤,近墨者黑,我們想看一個人是什么樣的,看他的朋友是什么樣的就可以了。當然其他還牽著到,看哪方面和朋友比較接近(對象特征),怎樣才算是跟朋友親近,一起吃飯還是一起逛街算是親近(距離函數(shù)),根據(jù)朋友的優(yōu)秀不優(yōu)秀如何評判目標任務(wù)優(yōu)秀不優(yōu)秀(分類算法),是否不同優(yōu)秀程度的朋友和不同的接近程度要考慮一下(距離權(quán)重),看幾個朋友合適(k值),能否以分數(shù)的形式表示優(yōu)秀度(概率分布)。

K最近鄰概念:

它的工作原理是:存在一個樣本數(shù)據(jù)集合,也稱作為訓(xùn)練樣本集,并且樣本集中每個數(shù)據(jù)都存在標簽,即我們知道樣本集中每一個數(shù)據(jù)與所屬分類的對應(yīng)關(guān)系。輸入沒有標簽的新數(shù)據(jù)后,將新的數(shù)據(jù)的每個特征與樣本集中數(shù)據(jù)對應(yīng)的特征進行比較,然后算法提取樣本最相似數(shù)據(jù)(最近鄰)的分類標簽。一般來說,我們只選擇樣本數(shù)據(jù)集中前k個最相似的數(shù)據(jù),這就是k-近鄰算法中k的出處,通常k是不大于20的整數(shù)。最后,選擇k個最相似數(shù)據(jù)中出現(xiàn)次數(shù)最多的分類,作為新數(shù)據(jù)的分類。

今天我們使用k最近鄰算法來構(gòu)建白酒的價格模型。

構(gòu)造數(shù)據(jù)集

構(gòu)建一個葡萄酒樣本數(shù)據(jù)集。白酒的價格跟等級、年代有很大的關(guān)系。

from random import random,randintimport math# 根據(jù)等級和年代對價格進行模擬def wineprice(rating,age): peak_age=rating-50 # 根據(jù)等級計算價格 price=rating/2 if age>peak_age:  # 經(jīng)過“峰值年”,后續(xù)5年里其品質(zhì)將會變差  price=price*(5-(age-peak_age)/2) else:  # 價格在接近“峰值年”時會增加到原值的5倍  price=price*(5*((age+1)/peak_age)) if price<0: price=0 return price# 生成一批模式數(shù)據(jù)代表樣本數(shù)據(jù)集def wineset1(): rows=[] for i in range(300):  # 隨機生成年代和等級  rating=random()*50+50  age=random()*50  # 得到一個參考價格  price=wineprice(rating,age)  # 添加一些噪音  price*=(random()*0.2+0.9)  # 加入數(shù)據(jù)集  rows.append({'input':(rating,age),'result':price}) return rows

數(shù)據(jù)間的距離

使用k最近鄰,首先要知道那些最近鄰,也就要求知道數(shù)據(jù)間的距離。我們使用歐幾里得距離作為數(shù)據(jù)間的距離。

# 使用歐幾里得距離,定義距離def euclidean(v1,v2): d=0.0 for i in range(len(v1)):  d+=(v1[i]-v2[i])**2 return math.sqrt(d)

獲取與新數(shù)據(jù)距離最近的k個樣本數(shù)據(jù)

# 計算給預(yù)測商品和原數(shù)據(jù)集中任一其他商品間的距離。data原數(shù)據(jù)集,vec1預(yù)測商品def getdistances(data,vec1): distancelist=[] # 遍歷數(shù)據(jù)集中的每一項 for i in range(len(data)):  vec2=data[i]['input']  # 添加距離到距離列表  distancelist.append((euclidean(vec1,vec2),i)) # 距離排序 distancelist.sort() return distancelist #返回距離列表            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 凌源市| 泸溪县| 清丰县| 龙游县| 临城县| 新宾| 田阳县| 永春县| 巴塘县| 郧西县| 潼南县| 萨嘎县| 行唐县| 离岛区| 新河县| 镇康县| 昆明市| 凤山县| 奉化市| 温宿县| 宿州市| 龙江县| 措勤县| 翼城县| 江安县| 西吉县| 茶陵县| 平顶山市| 南开区| 米脂县| 青浦区| 乌什县| 娱乐| 吕梁市| 陵川县| 枣阳市| 三门县| 太湖县| 洪洞县| 鹤峰县| 额尔古纳市|