最近在看支持向量机的算法,想着自己是否能够实现一个简单的例子。下面采用的数据集是著名的莺尾花数据,可以在UCI上载 http://archive.ics.uci.edu/ml/datasets/Iris。当然sklearn库里也有这个数据集,但是下载下来是为了更好的运用python语言处理更加一般的情况。下面这个代码主要目的是用sklearn.svm对莺尾花的3种型进行分类,随机取样本的一部分数据为训练集,一部分为测试集,并且最后把测试集的结果和实际样本进行比较,判断此分类的准确率。
# -*- coding: utf-8 -*-
"""
Created on Tue Aug 22 16:04:57 2017
@author: wuxiao
"""
import pandas as pd
from sklearn import svm
import numpy as np
from sklearn.model_selection import train_test_split #引入测试集,训练集
from sklearn.metrics import accuracy_score #引入准确率
data=pd.read_excel('G:\\test\\day 5\\iris.xls') #读取文件
print data
data.head()
#将文件中非数字数据转换为数字
data.loc[data["Iris_type"]=="Iris-setosa","Iris_type"]=0
data.loc[data["Iris_type"]=="Iris-versicolor","Iris_type"]=1
data.loc[data["Iris_type"]=="Iris-virginica","Iris_type"]=2
iris=np.array(data,dtype=np.float64) #生成矩阵
print iris
X = iris[:,0:-1] #提取features
print X
y = iris[:,-1].astype(int) #提取labels
print y
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)#随机划分训练集、测试集
clf=svm.SVC()
clf.fit(X_train,y_train)
y_pred=clf.predict(X_test)
accuracy_score(y_test, y_pred)
Accuracy=accuracy_score(y_test, y_pred)
print("%.2f%%" %(Accuracy*100)) #以百分数的形式,打印出准确率
最后输出:
# 利用pandas读取文件生成的data
#为数据预处理后的iris
#提取features的X
#提取labels的y
#最后生成的准确率。