电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python機器學習之底層實現KNN

瀏覽:19日期:2022-06-16 11:07:57
一、導入數據

借助python自帶的pandas庫導入數據,很簡單。用的數據是下載到本地的紅酒集。

代碼如下(示例):

import pandas as pddef read_xlsx(csv_path): data = pd.read_csv(csv_path) print(data) return data二、歸一化

KNN算法中將用到距離,因此歸一化是一個重要步驟,可以消除數據的量綱。我用了歸一化,消除量綱也可以用標準化,但是作為新手,我覺得歸一化比較簡單。

其中最大最小值的計算用到了python中的numpy庫,pandas導入的數據是DateFrame形式的,np.array()用來將DateFrame形式轉化為可以用numpy計算的ndarray形式。

代碼如下(示例):

import numpy as npdef MinMaxScaler(data): col = data.shape[1] for i in range(0, col-1):arr = data.iloc[:, i]arr = np.array(arr) #將DataFrame形式轉化為ndarray形式,方便后續用numpy計算min = np.min(arr)max = np.max(arr)arr = (arr-min)/(max-min)data.iloc[:, i] = arr return data三、分訓練集和測試集

先將數據值和標簽值分別用x和y劃分開,設置隨機數種子random_state,若不設置,則每次運行的結果會不相同。test_size表示測試集比例。

def train_test_split(data, test_size=0.2, random_state=None): col = data.shape[1] x = data.iloc[:, 0:col-1] y = data.iloc[:, -1] x = np.array(x) y = np.array(y) # 設置隨機種子,當隨機種子非空時,將鎖定隨機數 if random_state:np.random.seed(random_state)# 將樣本集的索引值進行隨機打亂# permutation隨機生成0-len(data)隨機序列 shuffle_indexs = np.random.permutation(len(x)) # 提取位于樣本集中20%的那個索引值 test_size = int(len(x) * test_size) # 將隨機打亂的20%的索引值賦值給測試索引 test_indexs = shuffle_indexs[:test_size] # 將隨機打亂的80%的索引值賦值給訓練索引 train_indexs = shuffle_indexs[test_size:] # 根據索引提取訓練集和測試集 x_train = x[train_indexs] y_train = y[train_indexs] x_test = x[test_indexs] y_test = y[test_indexs] # 將切分好的數據集返回出去 # print(y_train) return x_train, x_test, y_train, y_test四、計算距離

此處用到歐氏距離,pow()函數用來計算冪次方。length指屬性值數量,在計算最近鄰時用到。

def CountDistance(train,test,length): distance = 0 for x in range(length):distance += pow(test[x] - train[x], 2)**0.5 return distance五、選擇最近鄰

計算測試集中的一條數據和訓練集中的每一條數據的距離,選擇距離最近的k個,以少數服從多數原則得出標簽值。其中argsort返回的是數值從小到大的索引值,為了找到對應的標簽值。

tip:用numpy計算眾數的方法

import numpy as np#bincount():統計非負整數的個數,不能統計浮點數counts = np.bincount(nums)#返回眾數np.argmax(counts)

少數服從多數原則,計算眾數,返回標簽值。

def getNeighbor(x_train,test,y_train,k): distance = [] #測試集的維度 length = x_train.shape[1] #測試集合所有訓練集的距離 for x in range(x_train.shape[0]):dist = CountDistance(test, x_train[x], length)distance.append(dist) distance = np.array(distance) #排序 distanceSort = distance.argsort() # distance.sort(key= operator.itemgetter(1)) # print(len(distance)) # print(distanceSort[0]) neighbors =[] for x in range(k):labels = y_train[distanceSort[x]]neighbors.append(labels)# print(labels) counts = np.bincount(neighbors) label = np.argmax(counts) # print(label) return label

調用函數時:

getNeighbor(x_train,x_test[0],y_train,3)六、計算準確率

用以上KNN算法預測測試集中每一條數據的標簽值,存入result數組,將預測結果與真實值比較,計算預測正確的個數與總體個數的比值,即為準確率。

def getAccuracy(x_test,x_train,y_train,y_test): result = [] k = 3 # arr_label = getNeighbor(x_train, x_test[0], y_train, k) for x in range(len(x_test)):arr_label = getNeighbor(x_train, x_test[x], y_train, k)result.append(arr_label) correct = 0 for x in range(len(y_test)):if result[x] == y_test[x]: correct += 1 # print(correct) accuracy = (correct / float(len(y_test))) * 100.0 print('Accuracy:', accuracy, '%') return accuracy總結

KNN算是機器學習中最簡單的算法,實現起來相對簡單,但對于我這樣的新手,還是花費了大半天時間才整出來。

在github上傳了項目:https://github.com/chenyi369/KNN

到此這篇關于Python機器學習之底層實現KNN的文章就介紹到這了,更多相關Python底層實現KNN內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 广西资质代办_建筑资质代办_南宁资质代办理_新办、增项、升级-正明集团 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 阿里巴巴诚信通温州、台州、宁波、嘉兴授权渠道商-浙江联欣科技提供阿里会员办理 | 托盘租赁_塑料托盘租赁_托盘出租_栈板出租_青岛托盘租赁-优胜必达 | 气动球阀_衬氟蝶阀_调节阀_电动截止阀_上海沃托阀门有限公司 | 淘气堡_室内儿童乐园_户外无动力儿童游乐设备-高乐迪(北京) | 山东臭氧发生器,臭氧发生器厂家-山东瑞华环保设备 | 智能交通网_智能交通系统_ITS_交通监控_卫星导航_智能交通行业 | 新能源汽车教学设备厂家报价[汽车教学设备运营18年]-恒信教具 | 高效复合碳源-多核碳源生产厂家-污水处理反硝化菌种一长隆科技库巴鲁 | 微型气象仪_气象传感器_防爆气象传感器-天合传感器大全 | 东莞ERP软件_广州云ERP_中山ERP_台湾工厂erp系统-广东顺景软件科技有限公司 | 全自动不干胶贴标机_套标机-上海今昂贴标机生产厂家 | 自动化生产线-自动化装配线-直流电机自动化生产线-东莞市慧百自动化有限公司 | 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | 河南新乡德诚生产厂家主营震动筛,振动筛设备,筛机,塑料震动筛选机 | 武汉刮刮奖_刮刮卡印刷厂_为企业提供门票印刷_武汉合格证印刷_现金劵代金券印刷制作 - 武汉泽雅印刷有限公司 | 臭氧老化试验箱,高低温试验箱,恒温恒湿试验箱,防水试验设备-苏州亚诺天下仪器有限公司 | 重庆网站建设,重庆网站设计,重庆网站制作,重庆seo,重庆做网站,重庆seo,重庆公众号运营,重庆小程序开发 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 编织人生 - 权威手工编织网站,编织爱好者学习毛衣编织的门户网站,织毛衣就上编织人生网-编织人生 | 高压分散机(高压细胞破碎仪)百科-北京天恩瀚拓 | 气动调节阀,电动调节阀,自力式压力调节阀,切断阀「厂家」-浙江利沃夫自控阀门 | 超声骨密度仪-骨密度检测仪-经颅多普勒-tcd仪_南京科进实业有限公司 | 台式恒温摇床价格_大容量恒温摇床厂家-上海量壹科学仪器有限公司 | 新疆十佳旅行社_新疆旅游报价_新疆自驾跟团游-新疆中西部国际旅行社 | 连栋温室大棚建造厂家-智能玻璃温室-薄膜温室_青州市亿诚农业科技 | 回收二手冲床_金丰旧冲床回收_协易冲床回收 - 大鑫机械设备 | 河南正规膏药生产厂家-膏药贴牌-膏药代加工-修康药业集团官网 | 光伏家 - 太阳能光伏发电_分布式光伏发电_太阳能光伏网 | 钢板仓,大型钢板仓,钢板库,大型钢板库,粉煤灰钢板仓,螺旋钢板仓,螺旋卷板仓,骨料钢板仓 | 厂房出租-厂房规划-食品技术-厂房设计-厂房装修-建筑施工-设备供应-设备求购-龙爪豆食品行业平台 | 京港视通报道-质量走进大江南北-京港视通传媒[北京]有限公司 | 国际船舶网 - 船厂、船舶、造船、船舶设备、航运及海洋工程等相关行业综合信息平台 | 车辆定位管理系统_汽车GPS系统_车载北斗系统 - 朗致物联 | 超声波流量计_流量标准装置生产厂家 _河南盛天精密测控 | 天津云仓-天津仓储物流-天津云仓一件代发-顺东云仓 | 工业插头-工业插头插座【厂家】-温州罗曼电气 | 精密五金加工厂-CNC数控车床加工_冲压件|蜗杆|螺杆加工「新锦泰」 | 新疆十佳旅行社_新疆旅游报价_新疆自驾跟团游-新疆中西部国际旅行社 | 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 |