#读取鸢尾花数据集,header参数来指定标题的行,默认为0,若没有标题,则使用none
data = pd.read_csv(r’Iris.csv’,header=0)#header设置第0行为标题行
#将类别文本映射数值类型
data[‘Species’]=data[‘Species’].map({‘Iris-virginica’:0,‘Iris-setosa’:1,‘Iris-versicolor’:2}) #将种类进行映射
#删除不需要的id列
#data=data.drop(‘Id’,axis=1)
data.drop(‘Id’,axis=1,inplace=True)
data.duplicated().any()#结果为True证明有重复的
#删除重复的记录
data.drop_duplicates(inplace=True)
len(data) #说明有三条数据重复了
class KNN:
#使用Python语言使用k近邻算法:实现分类
def init(self,k):
“”“初始化方法
parameters
------
k:int类型,表示近邻个数
“””
self.k=k
def fit(self,X,y):
"""训练方法
Parameter
------
X:类数组类型,形状为:[样本数量,特征数量]
待训练的样本特征(属性)
y:类数组类型,形状为:[样本数量]
每个样本的目标值,即标签
"""
#将X转换为ndarray数组类型
self.X=np.asarray(X)
self.y=np.asarray(y)
def predict(self,X):
"""根据参数传递的样本,对样本数据进行预测
返回预测结果
Parameter
-----
X:类数组类型,形状为:[样本数量,特征数量]
待训练的样本特征(属性)
Returns
-----
result:数组类型
预测的结果。
"""
X=np.asarray(X)
result=[]
#对ndarray数据进行遍历,每次取出数组中的一行
for x in X:
#对于测试集中的每一个样本,依次与训练集中的所有样本求距离
dis=np.sqrt(np.sum((x-self.X)**2,axis=1))
#返回数组排序后,每个元素在原数组(排序之前的数组)中的索引
index=dis.argsort()
#进行阶段,只取前k个元素即可,【取距离最近的k个元素的索引】
index=index[:self.k]
#返回数组中每个元素出现的次数,元素必须是非的整数
count=np.bincount(self.y[index])
#返回ndarray数据中,值最大的元素对应的索引,该索引就是我们判定的类别
#最大的元素就是出现次数最多的元素,最大元素索引
result.append(count.argmax())
return np.asarray(result)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




