一个简单的机器学习项目---撰写自己的分类器(仅涉及简单的原理)

      本人小菜鸟一枚,堪称史上最不会敲代码的程序员。但是我有一腔热血,我一个不会打游戏,又不会撩妹的穷屌丝,不学习实在是不知道要去干嘛,虽然脑子笨,但是也得学点东西,要不然我一体重不过百,身高不过百的小老爷们怎么在社会上立足。别人可以‘拼爹’,我等屌丝就只能靠自己喽。

     说是我的博客,其实和自己的学习笔记差不多。我只是菜鸟一枚,学完习当然要做些笔记,古话说的好“好记性不如烂笔头”。希望有看到博文的大神能不吝赐教,也希望能有道友一同学习,废话不说,笔记开始。

 

#导入此包是因为要计算欧式距离

from scipy.spatial import distance

#定义函数求欧式距离

def enc(a,b):
    return distance.euclidean(a,b)

#我们在这里定义自己的分类器,根据分类需要添加必须的方法,在训练时调用自己撰写的分类器

class ScrappyKNN():
    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:

           #调用closest方法计算样本距离训练样本最近的标签

            lable=self.closest(row)
            predictions.append(lable)
        return predictions
def closest(self,row):
    best_dist=enc(row,self.x_train[0])
    best_index=0
    for i in range(1,len(x_train)):
        dist=enc(row,x_train[i])
        if dist < best_dist:

            best_dist=dist
            best_index=i

    return self.y_train[best_index]

#导入数据集
from sklearn import datasets

#得到数据集

iris=datasets.load_iris()
x=iris.data
y=iris.target
#把数据集切分成训练数据集和测试数据集
from sklearn.cross_validation import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=.5)
#1.使用决策树分类器
#from sklearn import tree
#my_classifier=tree.DecisionTreeClassifier()

 

#2.使用knn分类器
#from sklearn.neighbors import KNeighborsClassifier

#my_classifier=KNeighborsClassifier()

 

#3.使用自己定义的分类器

my_classifier=ScrappyKNN()
#使用分类器对我们的数据进行训练
my_classifier.fit(x_train,y_train)
#对我们的测试数据集进行预测
predictions=my_classifier.predict(x_test)
#print(predictions)
#统计一下准确率
from sklearn.metrics import accuracy_score
print (accuracy_score(y_test,predictions))

 

经过自己定义的一个简单的分类器,分类的正确率到达了:

>>0.9733333333333334

 

这篇笔记就到这里了,如有错误请多多指教。

 

你可能感兴趣的:(机器学习)