机器学习First Shoot——初识鸢尾花(鸢尾花分类)

机器学习First Shoot——初识鸢尾花(鸢尾花分类)…2 mins to browse

1. 开门见山导入数据 —— from sklearn.datasets

import numpy as np
import pandas as pd
import mglearn
from sklearn.datasets import load_iris   # 导入数据

iris_dataset = load_iris()
其中,load_iris()返回的对象类似于字典,具有键和值;调用的数据dataset的type是numpy的数组,另外也要注意数据数组的维度,'data’的shape是二维的,'target’的shape是一维的。

2. 模型基石 —— 将数据拆分成训练集和测试集

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
iris_dataset['data'], iris_dataset['target'], random_state=0)  # 拆分训练数据和测试数据

其中,经验法则:训练集(training set)占数据的75%,测试集(test set)占25%,利用train_test_split方法;X代表数据输入特征内容,y代表输出的结果或预期;random_state=0表示随机过程,个人理解0表示一次随机拆分后,产生的随机结果输出固定不变。

3.Important插曲 —— 数据观察之可视化

检查数据:其一,数据表达足够明显,如果不用机器学习是不是就能搞定问题;其二,解决问题的关键信息是否包含在了数据中;另外,检查数据也是发现异常值和特殊值的好方法。
利用散点图矩阵去描绘多于3个特征的数据集:

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)

机器学习First Shoot——初识鸢尾花(鸢尾花分类)_第1张图片
Iris数据集的部分散点图矩阵

4. 引入K近邻算法并预测

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train, y_train)

X_new = np.array([[5, 2.9, 1, 0.2]])  # 数据转化为二维数组,因为scikit-learn中要求输入数据必须是二维数组
print("X_new.shape: {}".format(X_new.shape))

prediction = knn.predict(X_new)  # 进行单个数据点的预测
print("Prediction: {}".format(prediction))
print("Predicted target name: {}".format(iris_dataset['target_names'][prediction]))
### 输出如下
X_new.shape: (1, 4)
Prediction: [0]
Predicted target name: ['setosa']

其中,k近邻算法是scikit-learn中neighbors模块中KNeighborsClassifier类中的方法。!!!此算法根据新数据点在训练集(train_set)中距离最近的邻居数据特征进行预测。knn实例对象对算法进行了封装,想基于训练集构建模型,要调用knn实例的fit方法。
后面,用单个样本进行了预测。

5. 终章 —— 模型评估

# 评估模型
y_pred = knn.predict(X_test)
print("Test set pridiction: {}".format(y_pred))
# 使用np.mean方法计算模型精度
print("Test set score: {}".format(np.mean(y_pred == y_test)))
# 使用knn中score方法计算测试集的精度
print("Test set score: {}".format(knn.score(X_test, y_test)))

精度评估结果输出

Test set pridiction: [2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0 2 1 0 2 2 1 0
 2]
Test set score: 0.9736842105263158
Test set score: 0.9736842105263158

其中精度表示预测正确的结果在测试集里面占的比例。

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