《阿里云AI产品必知必会系列电子书》——机器学习平台PAI——DSW Quick Start使用教程(上) https://developer.aliyun.com/article/1232671?groupCode=supportservice
二、DSW实现简单算法:K-近邻
我们通过身高体重两个维度指标,判定一个人的健康状态是优还是差。这里我们手动造一些训练数据,通过计算,最终计算测试人的健康状态。
1.打开Notebook
2.Python Code
#引入依赖,并以字典方式创建数据集 import pandas as pd get_data={'姓名':['甲','乙','丙','丁','戊','己','庚','辛'],'身高(cm)':[140,145,190,188,175,166,152,181],'体重(kg) ':[90,48,80,78,45,95,55,70],'健康状态':['异常','正常','正常','正常','异常','异常','正常','正常']} #看下数据内容 train_data=pd.DataFrame(get_data) train_data
#计算下已知的数据与每个点之间的距离 test_data=[180,75] train_data.iloc[:len(train_data),1:3]
dist = list((((train_data.iloc[:len(train_data),1:3]-test_data)**2).sum(1))**0.5) dist
#升序排列,取距离最小的K个点,这里取k为4 k=4 dist_l = pd.DataFrame({'dist':dist,'labels':(train_data.iloc[:len(train_data),3])}) dr = dist_l.sort_values(by='dist')[:4] dr
#确定前K个点中,健康状态的频率 re = dr.loc[:,'labels'].value_counts() re.index[0]
####封装下函数 import pandas as pd def classfy0(inx,dataSet,k): result=[] dist = list((((dataSet.iloc[:len(train_data),1:3]-inx)**2).sum(1))**0.5) dist_l = pd.DataFrame({'dist':dist,'labels':(dataSet.iloc[:8,3])}) dr = dist_l.sort_values(by='dist')[:k] re = dr.loc[:,'labels'].value_counts() result.append(re.index[0]) return result