1. 鸢尾花 demo
检查数据最好的方法是将其可视化,将所有数据放到一张图表中,制作散点图(scatter plot)。但是如果数据不是二维数据,而是多维数据的话,散点图就不符合要求了,可以使用散点矩阵。散点图矩阵可以两两查看所有的特征。
pandas 有一个绘制散点图矩阵的函数,叫作scatter_matrix。矩阵的对角线是每个特征的直方图。
2. KNN算法实现
sci-kit learn包中将KNN算法包装为对象KNeighborsClassifier,将样本区分出训练样本(75%)和测试样本(15%)。
fit、predict 和 score 方法是scikit-learn 监督学习模型中最常用的接口。
关于散点矩阵和knn预测的算法实现如下:
# -*- coding: UTF-8 -*-
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import pandas as pd
import matplotlib.pyplot as plt
import mglearn
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
if __name__ == '__main__':
# 获取iris数据集 Bunch数据结构
iris_data = load_iris()
print iris_data.keys()
print iris_data['target_names']
# 将样本数据分成训练和测试数据,默认的比例是(75%和15%)
X_train, X_test , y_train, y_test = train_test_split(iris_data['data'], iris_data['target'], random_state=0)
print "训练集和测试集的样本量:"
print X_train.shape
print X_test.shape
# 使用X_train数据制作散点矩阵
# 将iris_data转化成pandas的DataFramefeature_names
X_train_dastaframe = pd.DataFrame(X_train, columns=iris_data['feature_names'])
grid = pd.plotting.scatter_matrix(X_train_dastaframe, c=y_train, figsize=(15,15),
marker='o', hist_kwds={'bins':20}, s=60, alpha=.8, cmap=mglearn.cm3)
plt.show()
knn = KNeighborsClassifier(n_neighbors=1)
# 使用训练集训练模型 fit方法返回的是knn 对象本身并做原处修改
knn.fit(X_train, y_train)
# 随机一个样本,二维数组,并预测这个样本的所属归类。
X_new = np.array([[5, 2.9, 1, 0.2]])
y_new_predict = knn.predict(X_new)
print "随机样本[[5, 2.9, 1, 0.2]]的预测结果:"
print iris_data['target_names'][y_new_predict]
# 对测试组数据进行预测。使用knn 对象的score 方法来计算测试集的精度(测试集中归类正确的样本数/测试集中的样本总数)
y_test_predict = knn.predict(X_test)
y_test_score = knn.score(X_test,y_test)
print "测试集预测结果:"
print iris_data['target_names'][y_test_predict]
print "测试集预测精准度:" + str(y_test_score)
3. 监督学习
3.1 分类和回归
监督学习主要包括2种类型:分类问题和回归问题。区分分类和回归问题的方法是观察输出结果,如果输出结果是离散的(例如:是、否),那么就是分类问题,如果输出结果是连续的(例如:实数区间),那么就是回归问题。
3.2 泛化、过拟合和欠拟合
如果一个模型能够对没见过的数据做出准确预测,我们就说它能够从训练集泛化(generalize)到测试集。我们想要构建一个泛化精度尽可能高的模型。我们认为简单的模型对新数据的泛化能力更好。
构建一个对现有信息量来说过于复杂的模型,称为过拟合(overfitting)。选择过于简单的模型被称为欠拟合(underfitting)。过拟合和欠拟合都不会得到模型最佳的泛化能力:

