数据科学导论——K近邻

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 第1关:K近邻初识
        • 任务描述
        • 相关知识
        • 测试要求
  • 第2关:K近邻小试
        • 编程要求
        • 测试说明
  • 第3关:K近邻实战
        • 编程要求
        • 测试说明


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

第1关:K近邻初识

任务描述

本关任务:根据下列的相关知识,完成相关选择题。

相关知识

为了完成本关任务,你需要掌握以下相关知识:
1.了解 k 近邻分类方法的主要特点;
2.熟悉 k 近邻分类方法的基本步骤;
3. k 近邻分类方法的 k 值如何选择。
一、K近邻分类(K-Nearest Neighbors)
简单:非概率分类方法,仅含1个参数 k;
普适:二分类和多分类任务均可;
快速:无须“训练”。
二、K 近邻分类步骤
1、选择一个 K 值;
对于给定的(待分类)样本点 xnew。从样本集中找到 K 个与之最近的点,找出 K 个临近点中数目最多的那一类,如 Ck,将该样本点标记为 Ck。
2、K 值的选择
K太小:“过拟合”问题;
K太大:样本点多的类别“always win!”。
想象一个二分类场景:类别 1 有 5 个样本点,而类别 2 有 100 个样本点;当 K>10 时,分类结果总是类别 2。
3、如何选择合适的 K 值?
交叉验证法 —— 交叉验证的基本思想是把在某种意义下将原始数据( dataset )进行分组,一部分做为训练集( train set ),另一部分做为验证集( validation set or test set ),首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型( model ),以此来做为评价分类器的性能指标。
数据科学导论——K近邻_第1张图片

测试要求

根据相关知识,按照要求完成右侧选择题任务。
开始你的任务吧,祝你成功!

1、k近邻方法有几个参数?A、1
2、k近邻分类只能用于二分类问题。B、错误
3、使用k近邻方法时应将数据分为训练集和测试集。B、错误
4、如何选择合适的k值?C、交叉验证法

第2关:K近邻小试

编程要求

请仔细阅读右侧代码,结合相关知识,在 Begin-End 区域内进行代码补充,计算并输出数字的类型以及数字各属于两类的概率。其中 X 为样本点,y 为其类别(二分类问题),参数 k 的值设置为 3。

测试说明

平台会对你编写的代码进行测试:

测试输入:
 1
预期输出:
 0
 0.66666667,0.33333333 
测试输入:
 0
预期输出:
 1
 0.333333330.66666667 

开始你的任务吧,祝你成功!

#引入KNeighborsClassifier模块
from sklearn.neighbors import KNeighborsClassifier

X = [[0], [1], [2], [3]]
n = int(input())
if n == 0:
   y = [1,1,0,0]
else:
   y = [0,0,1,1]

#使用KNeighborsClassifier函数以及fit函数填空
# ********** Begin ********** #
neigh = KNeighborsClassifier(n_neighbors=3)
neigh.fit(X, y)

# ********** End ********** #

#输出数字1.1的类型以及数字0.9各属于两类的概率
print(neigh.predict([[1.1]]))
print(neigh.predict_proba([[0.9]]))

第3关:K近邻实战

编程要求

请仔细阅读右侧代码,结合相关知识,在 Begin-End 区域内进行代码补充,实现面向鸢尾花数据集的 k 近邻分类方法。

除补充完整代码之外,还应逐行理解右边示例代码,学习各函数及参数的用法,并举一反三,运用到其他的分类问题之中。

测试说明

平台会对你编写的代码进行测试:

预期输出:
[0.14205973 0.76664038 0.0282433  0.06305659]
[1]

预期输出图片显示为:
数据科学导论——K近邻_第2张图片

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn import neighbors, svm, tree, ensemble 
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
import warnings
warnings.filterwarnings("ignore")   #忽略警告
with warnings.catch_warnings():
    warnings.filterwarnings("ignore",category=DeprecationWarning)
    from numpy.core.umath_tests import inner1d


# set the number of neighbors
n_neighbors = 15

# import the iris dataset
#------------------begin--------------------
iris = datasets.load_iris()
# only take the first two features
X = iris.data[:, :2]  
y=iris.target
#-------------------end---------------------

h = .02  # step size in the mesh

# Create color maps
cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])
cmap_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])

#基于K近邻分类结果描绘分类边界
#------------------begin--------------------
for weights in ['uniform', 'distance']:
  # create an instance of KNN Classifier and fit the data.
    clf = neighbors.KNeighborsClassifier(n_neighbors, weights=weights)
    clf.fit(X, y)
    # Plot the decision boundary. For that, we will assign a color to each
    # point in the mesh [x_min, x_max]x[y_min, y_max].
    x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                         np.arange(y_min, y_max, h))
    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])

#-------------------end---------------------

    # Put the result into a color plot
    Z = Z.reshape(xx.shape)
    plt.figure()
    plt.pcolormesh(xx, yy, Z, cmap=cmap_light)

    # Plot also the training points
    plt.scatter(X[:, 0], X[:, 1], c=y, cmap=cmap_bold,
                edgecolor='k', s=20)
    plt.xlim(xx.min(), xx.max())
    plt.ylim(yy.min(), yy.max())
    plt.title("3-Class classification (k = %i, weights = '%s')"
              % (n_neighbors, weights))

plt.savefig("step3/结果/result.png")

from sklearn.ensemble import RandomForestClassifier

X, y = datasets.make_classification(n_samples=1000, n_features=4,
                           n_informative=2, n_redundant=0,
                           random_state=0, shuffle=False)
clf_rf = RandomForestClassifier(n_estimators=100, max_depth=2,
                             random_state=0)
clf_rf.fit(X, y)

#输出clf_rf的各特征权重以及预测[0,0,0,0]的类别
#------------------begin--------------------
print(clf_rf.feature_importances_)
print(clf_rf.predict([[0,0,0,0]]))

#-------------------end---------------------

你可能感兴趣的:(数据挖掘,分类,数据挖掘,人工智能)