决策数算法——鸢尾花分类实战

鸢尾花分类实战:

鸢尾花数据集是机器学习领域一个非常经典的分类数据集。接下来,我们就用这个作为训练集为基础,一步一步地训练机器学习模型。首先我们来看下数据集的基本构成。数据集名称的准确名称为 Iris Data Set,总共包含了150行数据。每一行数据由4个特征值及一个目标值组成。其中4个也正值分别为:儿骗长度,儿骗宽度,滑板长度,花瓣宽度。而目标值及为三中不同类别的鸢尾花,分别为:Iris Setosa,Iris Versicolour,Iris Virginica。

查看简单的特征数:

from sklearn import datasets

iris = datasets.load_iris()
iris_feature = iris.data
iris_target = iris.target

print(iris_target)

>>>
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]

这里,scikit-learn已经将花的原名进行了转换,其中0,1,2分别代表Iris Setosa,Iris Versicolour,Iris Virginica。

这些写数据是按照鸢尾花类别的顺序排列的。所以,如果我们将其直接划分为训练集和数据集的话,就会造成数据的分布不均。详细来讲,直接划分容易造成某种类型的花在训练集中一次都未出现,训练的模型就哟永远不可能预测出这种话来。你可能会想到,我们将这些数据打乱后再划分训练集和数据集。当然,更方便地,scikit-learn为我们提供了训练集和数据集的方法。

from sklearn.model_selection import train_test_split
from sklearn import datasets

iris = datasets.load_iris()
iris_feature = iris.data
iris_target = iris.target

feature_train,feature_test,target_train,target_test = train_test_split(iris_feature,iris_target,test_size=0.3,random_state=42)

print(target_train)
>>>
arrary[1 2 2 1 2 1 2 1 0 2 1 0 0 0 1 2 0 0 0 1 0 1 2 0 1 2 0 2 2 1 1 2 1 0 1 2 0
 0 1 1 0 2 0 0 1 1 2 1 2 2 1 0 0 2 2 0 0 0 1 2 0 2 2 0 1 1 2 1 2 0 2 1 2 1
 1 1 0 1 1 0 1 2 2 0 1 2 2 0 2 0 1 2 2 1 2 1 1 2 2 0 1 2 0 1 2]

其中,feature_train,feature_test,target_train,target_test分别代表训练集特征,测试特集征集,训练集目标值,测试集目标值。test_size参数代表划分到测试集数据占全部数据的百分比,你也可以用train_size来指定训练集所占全部数据的百分比。一般情况下,我们会将整个训练集划分为70%训练集和30%测试集。最后的random_state参数表示乱序程度。

现在花的种类已经变成了乱序状态,并且只包含有整个训练集的70%数据。

模型训练和预测

from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn import datasets

iris = datasets.load_iris()
iris_feature = iris.data
iris_target = iris.target

feature_train,feature_test,target_train,target_test = train_test_split(iris_feature,iris_target,test_size=0.3,random_state=42)

dt_model = DecisionTreeClassifier()
dt_model.fit(feature_train,target_train)

predict_results = dt_model.predict(feature_test)
print(predict_results)
print(target_test)
>>>
[1 0 2 1 1 0 1 2 1 1 2 0 0 0 0 1 2 1 1 2 0 2 0 2 2 2 2 2 0 0 0 0 1 0 0 2 1
 0 0 0 2 1 1 0 0]
[1 0 2 1 1 0 1 2 1 1 2 0 0 0 0 1 2 1 1 2 0 2 0 2 2 2 2 2 0 0 0 0 1 0 0 2 1
 0 0 0 2 1 1 0 0]

可以通过scikit_learn中提供的评估计算方法查看预测结果的准确度

from sklearn.metrics import accuracy_score

print(accuracy_score(predict_results,target_test))
>>>
1.0
发布了64 篇原创文章 · 获赞 14 · 访问量 9182

猜你喜欢

转载自blog.csdn.net/jiangSummer/article/details/104126417