暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

鸢尾花KNN分类算法

原创 Zixin Haw 2023-03-09
217

#读取鸢尾花数据集,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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论