python原生写KNN算法(鸢尾花)

1.作业题目

Python原生代码实现KNN算法(鸢尾花数据集)

2.算法设计

步骤:

    (1)利用KNN算法对鸢尾花数据进行分类(利用sklearn自带的iris数据集)

(2)将33%的数据作为测试集

(3)将数据传入预测函数中,得出结果

(4)将传入的数据与实际数据进行对比,得出正确率

(5)主函数整合

所有方法:

(1)获取鸢尾花数据:iris_data(self)

(2)将数据分割成测试集和训练集data(self)

(3)K值传入:__init__(self,k)

(4)训练函数:fit(self,x_train,y_train)

(5)预测函数:_predict(self,x_test)

(6)predict(self,X_predict)

(7)正确率函数:sorce(self,x_test,y_test)

3测试用例设计及调试过程截屏

部分重要代码:

def iris_data(self):
    iris = load_iris()
    iris_data = iris.data
    iris_target = iris.target
    return iris_data, iris_target
#加载数据,返回测试集,训练集
def data(self):
   # 1.获取鸢尾花的特征值,目标值
    iris_data, iris_target = self.iris_data()
   # 2.将数据分割成训练集和测试集 test_size=0.33表示将33%的数据用作测试集
    x_train, x_test, y_train, y_test = train_test_split(iris_data, iris_target, test_size=0.33)
    return x_train,x_test,y_train,y_test

def _predict(self,x_test):
    #欧氏距离
    d = [np.sqrt(np.sum((x_i - x_test) ** 2)) for x_i in self.x_train]
    #将欧氏距离递增排序
    neard=np.argsort(d)
    #选取最近的k个点
    top_k=[self.y_train[i] for in neard[:self.k]]
    #判断k个点中,类别最多的那一类
    #计数,将每个类出现的概率
    votes=Counter(top_k)
    return  votes.most_common(1)[0][0]   #显示前1个最多的元素

结果截屏:

调试过程截屏:

 

4总结

作业参考地址:https://blog.youkuaiyun.com/qq_41689620/article/details/82421323

https://blog.youkuaiyun.com/xzy53719/article/details/83149738

 

 

 

本次作业让我深刻的认识到自己的不足,在程序实现过程中,遇到了各种各样的问题,

首先自己没有找到numpy等包,所以在运行时会出现错误,

解决方式:将anaconda中的包导入;

其次在获取iris数据集时,很长时间找不到出错的位置,

解决方式:获取数据集需要使用一些包内自带的函数,但包及函数都需要对应查找;

最后,在程序中的一些调用会存在一些冲突,所以使得程序逻辑不太完整,

解决方式:程序部分运行测试

收获:进一步了解了KNN算法以及python语句的使用方式,实际对分析数据集有了一定了解及想法。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值