机器学习算法:回归(理论)

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)。过拟合和欠拟合都不会得到模型最佳的泛化能力:

机器学习算法:回归(理论)_第1张图片

你可能感兴趣的:(机器学习算法:回归(理论))