本函数主要是使用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 这些都是可以自己更改的。
