使用sklearn 决策树,KNN,以及自定义KNN类来实现分类

本文介绍了如何使用sklearn库的决策树和KNN分类器对花卉数据进行分类,并展示了如何利用scipy自定义KNN算法。通过训练数据和测试数据,比较了sklearn内置KNN与自定义KNN算法的分类效果,发现两者在准确率上的差距不大,自定义KNN算法使用默认的邻近数1,但这个参数可调。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本函数主要是使用sklearn三方库的一些函数来实现花朵种类的分类
同时也使用scipy自定义KNN算法

import numpy as np
from sklearn.datasets import load_iris   #导入数据
from sklearn import tree  # 导入决策树

导入数据

> iris = load_iris()
# print iris.feature_names
# print  iris.target_names
# print iris.data[1]
# print iris.target[1]
iris = load_iris()
test_idx=[0,50,100]

对训练数据和测试数据进行分类 改算法实现只使用了一部分数据,下面将使用全部数据
训练数据

train_targe = np.delete(iris.target,test_idx)
train_data = np.delete(iris.data,test_idx,axis=0)
测试数据
test_target = iris.target[test_idx]
test_data = iris.data[test_idx]
#加载决策树分类器
clf = tree.DecisionTreeClassifier()
对训练数据进行训练

clf.fit(train_data,train_targe)
#下面实现的是使用pydot把决策树输出到pdf文件中,可视化决策树 在实现这个功能之前需要下载pydot这个库
import pydot
dot_data = tree.export_graphviz(clf, out_file=None)
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_pdf("iris.pdf")
print test_target
print clf.predict(test_data)

下面采用KNN,和决策树来实现分类
去读数据 X是数据 Y 是类别标签

这是使用的决策树实现分类

iris = load_iris()
X = iris.data
y= iris.target
from sklearn.cross_validation import train_test_split # 使用交叉验证方法 test_size:样本占比,如果是整数的话就是样本的数量
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=.2)
from sklearn import tree  #导入决策树
my_classfiler = tree.DecisionTreeClassifier() #决策树分类器
my_classfiler.fit(X_train,y_train) #进行训练
predictions=my_classfiler.predict(X_test) # 对模型进行验证
from sklearn.metrics import accuracy_score
print (accuracy_score(y_test,predictions)) # 显示模型的准确率

使用KNN 进行分类

from sklearn.neighbors import KNeighborsClassifier
my_classfiler=KNeighborsClassifier()
my_classfiler.fit(X_train,y_train) #进行训练
predictions=my_classfiler.predict(X_test) # 对模型进行验证
from sklearn.metrics import accuracy_score
print (accuracy_score(y_test,predictions)) # 显示模型的准确率

下面是自定义的KNN
创建KNN类 以及把欧氏距离函数写出来 改函数使用scipy包实现

#计算距离的欧氏距离算法
from scipy.spatial import  distance
def euc(a,b):
    return distance.euclidean(a,b)

# 自定义KNN 类
import random
class ScrapyKNN:
    def fit(self,X_train,y_train):
        self.X_train=X_train
        self.y_train=y_train
    def predict(self,X_test):
        predictions = []
        for row in X_test:
            lable=self.closest(row)
            predictions.append(lable)
        return predictions
    def closest(self,row):
        best_dist=euc(row,self.X_train[0])
        best_index = 0;
        for i in range(1,len(self.X_train)):
            dist=euc(row,self.X_train[i])
            if (dist < best_dist):
                best_dist=dist
                best_index = i
        return self.y_train[best_index]

my_classfiler =ScrapyKNN()
my_classfiler.fit(X_train,y_train)
predictions = my_classfiler.predict(X_test)
from sklearn.metrics import accuracy_score
print accuracy_score(y_test,predictions)

到此KNN和决策树实现花朵分类就已经实现了,导入knn和决策树对于机器学习算法来说只是比较简单的算法。值得一提的是自定义的KNN算法和sklearn中的knn算法的准确率差别并不是很大,自定义的KNN算法使用的是默认的邻近数字1 这些都是可以自己更改的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值