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