数据科学导论——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 ),以此来做为评价分类器的性能指标。

测试要求

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

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]

预期输出图片显示为:

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---------------------
数据可视化是数据科学领域中重要的一环,它通过图表、图形和其他可视化工具将数据呈现出来,以便能够更好地理解和分析数据。 首先,数据可视化可以帮助我们更好地理解数据。通过将数据可视化成图表或图像,我们可以直观地看到数据的分布、趋势和模式。这些可视化结果可以让我们更容易地发现数据中的有意义的信息,并且帮助我们深入理解数据所传达的含义。 其次,数据可视化还可以帮助我们发现数据中的异常值。通过对数据进行可视化,我们可以快速地发现与众不同的数据点或异常模式。这些异常值可能是我们的数据收集过程中的错误,或者是数据背后隐藏的重要信息。通过识别和处理这些异常值,我们可以提高数据质量和分析的准确性。 此外,数据可视化也有助于数据的传达和沟通。在现实世界中,不同背景的人对于数据的理解能力和统计分析的能力有所差异。数据可视化可以帮助我们以更直观的方式向其他人传达数据,使得他们更容易理解和接受数据的分析结果。通过合适的图表和图形,我们可以有效地解释数据背后的趋势和系,并与其他人进行更有意义的讨论和决策。 综上所述,数据可视化在数据科学中起着重要的作用。它不仅帮助我们更好地理解和分析数据,发现异常值,还能够向他人有效传达和沟通数据。因此,在进行数据科学工作时,数据可视化是必不可少的一项技能和工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玄九Coral

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值