机器学习项目实战系列 鸢尾花
目录
一、环境准备
1.安装Python3
2.安装好anaconda
3.安装好相应的库
- Numpy:用于 Python 的数值处理,最常用的一个库
- PIL:一个简单的图像处理库
- scikit-learn:包含多种机器学习算法
- Kears 和 TensorFlow
二、鸢尾花背景知识
可以把这个 Iris(鸢尾花)理解成为机器学习的helloworld
花的四个属性分别是
- Sepal length--萼片长度
- Sepal width--萼片宽度
- Petal length--花瓣长度
- Petal width--花瓣宽度
三、通过数据集生成决策树
1.导入数据集
from sklearn.datasets import load_iris
iris = load_iris()
2.训练数据测试数据
import numpy as np
from sklearn.datasets import load_iris
iris = load_iris()
#test_idx是测试数据的下标
test_idx = [0,50,100]
#训练数据,train_target是结果,train_data是特征
train_target = 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]
3.建立决策树
#建立决策树
clf = tree.DecisionTreeClassifier()
clf.fit(train_data,train_target)
print(test_target)
print(clf.predict(test_data))
#可视化的决策
from six import StringIO
import pydotplus
dot_data = StringIO()
tree.export_graphviz(clf,
out_file=dot_data,
feature_names=iris.feature_names,
class_names=iris.target_names,
filled=True, rounded=True,
impurity=False)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("iris.pdf")
4.运行生成决策树PDF
生成决策时PDF文件
四、检验数据
import mglearn
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
iris_dataset = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
iris_dataset['data'], iris_dataset['target'], random_state=0)
iris_dataframe = pd.DataFrame(X_train, columns=iris_dataset.feature_names)
grr = pd.plotting.scatter_matrix(iris_dataframe, c=y_train, figsize=(15, 15), marker='o',
hist_kwds={'bins': 20}, s=60, alpha=.8, cmap=mglearn.cm3)
- train_test_split 函数利用伪随机数生成器将数据打乱,然后将其分为训练集和测试集
- scatter_matrix 函数利用鸢尾花的特征矩阵(iris_dataframe)创建散点图矩阵,按训练集的标签(y_train)着色,一共三种颜色(一共3类),用点绘图(marker='o'),图大小为10*10(figsize=(10,10)),直方图的区间数为20(hist_kwds={'bins':20}),点大小为60(s=60),透明度为80%(alpha=0.8),用viridis风格画图。
由图可知,利用花瓣和花萼的测量数据基本可以将三个类别区分开,这说明机器学习模型很可能可以学会区分它们。
五、训练模型 预测评估
1.构建训练模型
这里我们选择k近邻分类模型,k近邻算法中k的含义是,我们可以考虑训练集中与新数据点最近的任意k个邻居,而不是只考虑最近的那一个。
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1)
2.进行训练、预测并评估
knn.fit(X_train,y_train)
y_pred = knn.predict(X_test)
print('Test set score:\n{}'.format(np.mean(y_pred == y_test)))
可以看到精度达到了97.3%,说明模型足够可信,可以运用它来预测新模型