iris数据集是来自于Python自带的基础算法分析数据,主要作为算法分析和算法认识,是最为基础性的实例。
1.引入函数依赖
在这里使用了sklearn和numpy两个库作为基础依赖,算法选取了SVM算法实现二分类问题的求解。
import sklearn
from sklearn import datasets
from sklearn import svm
import numpy as np
2.数据显示与预处理
首先要将iris数据集中的数据直观的展现出来,这里将所有数据进行截取,选择样本前五行进行显示。
if __name__ == '__main__':
iris = sklearn.datasets.load_iris()
# data对应了样本的4个特征,150行4列
print('>> shape of data:')
print(iris.data.shape)
# 显示样本特征的前5行
print('>> line top 5:')
print(iris.data[:5])
# target对应了样本的类别(目标属性),150行1列
print('>> shape of target:')
print(iris.target.shape)
# 显示所有样本的目标属性
print('>> show target of data:')
print(iris.target)
#数据加载
x = iris.get('data')
y = iris.get('target')
iris = datasets.load_iris()
print(type(iris), dir(iris))
3.模型训练
训练数据时要对数据进行分割处理,本次使用了三七开的方式,即:70%训练集、30%测试集。
# 数据分割
num = x.shape[0]
ratio = 7 / 3
num_test = int(num / (1 + ratio)) # 测试集样本数目
num_train = num - num_test # 训练集样本数目
index = np.arange(num) # 产生样本标号
np.random.shuffle(index) # 洗牌
x_test = x[index[:num_test], :] # 取出洗牌后前 num_test 作为测试集
y_test = y[index[:num_test]]
x_train = x[index[num_test:], :] # 剩余作为训练集
y_train = y[index[num_test:]]
实际的模型设计如下:
# 数据集训练
clf_linear = svm.SVC(decision_function_shape="ovo", kernel="linear")
clf_rbf = svm.SVC(decision_function_shape="ovo", kernel="rbf")
clf_linear.fit(x_train, y_train)
clf_rbf.fit(x_train, y_train)
y_test_pre_linear = clf_linear.predict(x_test)
y_test_pre_rbf = clf_rbf.predict(x_test)
在完成模型训练后,还需要对模型进行分析评估,测试算法的准确率,算法准确率是评估模型好坏的重要指标。
#判断训练效果
acc_linear = sum(y_test_pre_linear == y_test) / num_test
print('linear kernel: The accuracy is', acc_linear)
acc_rbf = sum(y_test_pre_rbf == y_test) / num_test
print('rbf kernel: The accuracy is', acc_rbf)
最后,完整代码如下:
import sklearn
from sklearn import datasets
from sklearn import svm
import numpy as np
if __name__ == '__main__':
iris = sklearn.datasets.load_iris()
# data对应了样本的4个特征,150行4列
print('>> shape of data:')
print(iris.data.shape)
# 显示样本特征的前5行
print('>> line top 5:')
print(iris.data[:5])
# target对应了样本的类别(目标属性),150行1列
print('>> shape of target:')
print(iris.target.shape)
# 显示所有样本的目标属性
print('>> show target of data:')
print(iris.target)
#数据加载
x = iris.get('data')
y = iris.get('target')
iris = datasets.load_iris()
print(type(iris), dir(iris))
# 数据分割
num = x.shape[0]
ratio = 7 / 3
num_test = int(num / (1 + ratio)) # 测试集样本数目
num_train = num - num_test # 训练集样本数目
index = np.arange(num) # 产生样本标号
np.random.shuffle(index) # 洗牌
x_test = x[index[:num_test], :] # 取出洗牌后前 num_test 作为测试集
y_test = y[index[:num_test]]
x_train = x[index[num_test:], :] # 剩余作为训练集
y_train = y[index[num_test:]]
# 数据集训练
clf_linear = svm.SVC(decision_function_shape="ovo", kernel="linear")
clf_rbf = svm.SVC(decision_function_shape="ovo", kernel="rbf")
clf_linear.fit(x_train, y_train)
clf_rbf.fit(x_train, y_train)
y_test_pre_linear = clf_linear.predict(x_test)
y_test_pre_rbf = clf_rbf.predict(x_test)
#判断训练效果
acc_linear = sum(y_test_pre_linear == y_test) / num_test
print('linear kernel: The accuracy is', acc_linear)
acc_rbf = sum(y_test_pre_rbf == y_test) / num_test
print('rbf kernel: The accuracy is', acc_rbf)