• MyBlog


    Contents

    以某州的乳腺癌数据集入手:

    1.K近邻分类&分析KNeighborsClassfier

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    import matplotlib.pyplot as plt
    import sklearn
    import mglearn

    from sklearn.datasets import load_breast_cancer
    cancer = load_breast_cancer()
    print("cancer.keys(): n{}".format(cancer.keys()))

    '''输出
    cancer.keys():
    dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename'])
    '''
    1
    2
    3
    print("Shape of cancer data: {}".format(cancer.data.shape)) 
    # 输出:569个数据点 每个数据点有30个特征
    # Shape of cancer data: (569, 30)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    print("Sample counts per class:n{}".format(
    {n: v for n, v in zip(cancer.target_names, np.bincount(cancer.target))}))

    # Sample counts per class:
    # {'malignant': 212, 'benign': 357}
    # 恶性212个,良性357个

    '''备注
    zip: 打包成元组
    bincount: 对应索引在数组中出现的次数

    例如:
    x = np.array([7, 6, 2, 1, 4])
    np.bincount(x)
    输出:array([0, 1, 1, 0, 1, 0, 1, 1])
    '''

    http://localhost:8888/notebooks/%E7%9B%91%E7%9D%A3%E5%AD%A6%E4%B9%A0.ipynb

    2.k近邻回归&分析KNeighborsRegressor

    k近邻算法亦可用于回归。从单一近邻开始。使用wave数据集,添加3个测试数据点。

    1
    mglearn.plots.plot_knn_regression(n_neighbors=1)

    使用多个近邻进行回归,预测结果为邻居从平均值:

    1
    mglearn.plots.plot_knn_regression(n_neighbors=3)

    用于回归的K近邻算法在sklearn的KNeighborsRegressor类中实现。用法与KNeigh 大专栏  MyBlogborsClassfier类似:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from sklearn.neighbors import KNeighborsRegressor

    X, y = mglearn.datasets.make_wave(n_samples=40)

    #将wave数据集分为训练集和测试集
    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

    #模型实例化,并将邻居个数设为3
    reg = KNeighborsRegressor(n_neighbors=3)
    #拟合模型
    reg.fit(X_train, y_train)

    print("Test set predictions:n{}".format(reg.predict(X_test)))

    可用score方法评估模型,对于回归问题,这一方法返回的是R²分数。R²分数也叫做决定系数,是回归模型预测的优度度量,位于01(常数模型(总是预测y_train的平均值)完美预测)。

    1
    2
    3
    print("R^2: ", reg.score(X_test, y_test))

    # 输出为0.83 表示拟合相对较好

    查看所有特征取值对应的预测结果。创建一个由许多点组成的测试数据集并绘图:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    fig, axes = plt.subplots(1, 3, figsize=(15, 4))
    # 创建100个数据点,在-3和3之间均匀分布
    line = np.linspace(-3, 3, 1000).reshape(-1, 1)# reshap()是数组对象中的方法,用于改变数组的形状。变为1列,行数自动计算
    for n_neighbors, ax in zip([1, 3, 9], axes):
    # 利用1个、3个或9个邻居分别进行预测
    reg = KNeighborsRegressor(n_neighbors=n_neighbors)
    reg.fit(X_train, y_train)
    ax.plot(line, reg.predict(line))
    ax.plot(X_train, y_train, '^', c=mglearn.cm2(0), markersize=8)
    ax.plot(X_test, y_test, 'v', c=mglearn.cm2(1), markersize=8)
    ax.set_title(
    "{} neighborsn train score: {:.2f} test score: {:.2f}".format(
    n_neighbors, reg.score(X_train, y_train),reg.score(X_test, y_test)))
    ax.set_xlabel("Feature")
    ax.set_ylabel("Target")
    axes[0].legend(["Model predictions", "Training data/target", "Test data/target"], loc="best")

    不同neighbor值下预测结果对比

    考虑更多的点后,曲线更加平滑,,但拟合不够好

    优缺点&参数:

    KNeighbors有两个重要参数:邻居个数(3or5or..)数据点之间距离的度量方法(默认欧氏距离)

    优缺点:模型容易理解。构建最近邻模型的速度通常很快,但若训练集很大,预测速度可能会比较慢,不能处理很多特征的数据集。

  • 相关阅读:
    List Map 根据指定的字段进行去重处理
    mysql8.0免安装版详细配置
    Typora: 设置Typora自动上传图片到Github
    sed 查找行里面包含image指定的内容,在这一行的结尾添加版本内容:2.2.5
    转——visual studio快捷键大全
    OpenWrt 20.02.2 小米路由器3G配置CP1025网络打印
    PostgreSQL 的窗口函数 OVER, WINDOW, PARTITION BY, RANGE
    centos一行执行多条linux 命令
    上半年最中意的 GitHub 更新「GitHub 热点速览 v.22.21」
    《HelloGitHub》第 74 期
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12433367.html
Copyright © 2020-2023  润新知