首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >K近邻算法实现分类案例

K近邻算法实现分类案例

作者头像
用户3577892
发布2020-06-11 12:20:17
6300
发布2020-06-11 12:20:17
举报
文章被收录于专栏:数据科学CLUB数据科学CLUB

数据载入数据处理构建模型模型评估

数据载入

将使用Iris数据集

#从sklearn.datasets导人iris数据加载器。租
from sklearn.datasets import load_iris
#使用加载器读取数据并且存人变量iris.
iris=load_iris ()
#查验数据规模。
iris.data.shape
(150, 4)
#查看数据说明。对于一名机器学习的实践者来讲,这是一个好习惯。
print(iris.DESCR)
Iris Plants Database
====================

Notes
-----
Data Set Characteristics:
    :Number of Instances: 150 (50 in each of three classes)
    :Number of Attributes: 4 numeric, predictive attributes and the class
    :Attribute Information:
        - sepal length in cm
        - sepal width in cm
        - petal length in cm
        - petal width in cm
        - class:
                - Iris-Setosa
                - Iris-Versicolour
                - Iris-Virginica
    :Summary Statistics:

    ============== ==== ==== ======= ===== ====================
                    Min  Max   Mean    SD   Class Correlation
    ============== ==== ==== ======= ===== ====================
    sepal length:   4.3  7.9   5.84   0.83    0.7826
    sepal width:    2.0  4.4   3.05   0.43   -0.4194
    petal length:   1.0  6.9   3.76   1.76    0.9490  (high!)
    petal width:    0.1  2.5   1.20  0.76     0.9565  (high!)
    ============== ==== ==== ======= ===== ====================

    :Missing Attribute Values: None
    :Class Distribution: 33.3% for each of 3 classes.
    :Creator: R.A. Fisher
    :Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)
    :Date: July, 1988

This is a copy of UCI ML iris datasets.
http://archive.ics.uci.edu/ml/datasets/Iris

The famous Iris database, first used by Sir R.A Fisher

This is perhaps the best known database to be found in the
pattern recognition literature.  Fisher's paper is a classic in the field and
is referenced frequently to this day.  (See Duda & Hart, for example.)  The
data set contains 3 classes of 50 instances each, where each class refers to a
type of iris plant.  One class is linearly separable from the other 2; the
latter are NOT linearly separable from each other.

References
----------
   - Fisher,R.A. "The use of multiple measurements in taxonomic problems"
     Annual Eugenics, 7, Part II, 179-188 (1936); also in "Contributions to
     Mathematical Statistics" (John Wiley, NY, 1950).
   - Duda,R.O., & Hart,P.E. (1973) Pattern Classification and Scene Analysis.
     (Q327.D83) John Wiley & Sons.  ISBN 0-471-22361-1.  See page 218.
   - Dasarathy, B.V. (1980) "Nosing Around the Neighborhood: A New System
     Structure and Classification Rule for Recognition in Partially Exposed
     Environments".  IEEE Transactions on Pattern Analysis and Machine
     Intelligence, Vol. PAMI-2, No. 1, 67-71.
   - Gates, G.W. (1972) "The Reduced Nearest Neighbor Rule".  IEEE Transactions
     on Information Theory, May 1972, 431-433.
   - See also: 1988 MLC Proceedings, 54-64.  Cheeseman et al"s AUTOCLASS II
     conceptual clustering system finds 3 classes in the data.
   - Many, many more ...

通过上述代码对数据的查验以及数据本身的描述,了解到Iris数据集共有150朵鸢尾数据样本,并且均匀分布在3个不同的亚种;每个数据样本被4个不同的花瓣、花萼的形状特征所描述。

数据处理

由于没有指定的测试集,因此按照惯例,需要对数据进行随机分割,25%的样本用于测试,其余75%的样本用于模型的训练。

#从sklearn.cross validation里选择导人train test_ split 用于数据分割。
from sklearn.cross_validation import train_test_split
#从使用train test_ split,利用随机种子random state采样258的数据作为测试集。
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target,
test_size=0.25, random_state = 33)
C:\ProgramData\Anaconda3\lib\site-packages\sklearn\cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.
  "This module will be removed in 0.20.", DeprecationWarning)

构建模型

使用K近邻分类器对鸢尾花(Iris)数据进行类别预测

#从sklearn.preprocessing里选择导人数据标准化模块。
from sklearn.preprocessing import StandardScaler
#从sklearn. neighbors里选择导人KNeighborsClassifier,即K近邻分类器。
from sklearn.neighbors import KNeighborsClassifier
#对训练和测试的特征数据进行标准化。
ss = StandardScaler ()
x_train = ss.fit_transform(x_train)
x_test = ss.transform(x_test)

模型评估

使用准确性、召回率、精确率和F1指标,4个测度对K近邻分类模型在经典鸢尾花品种预测任务上进行性能评估。

#使用K近邻分类器对测试数据进行类别预测,预测结果储存在变量y_predict中。
knc = KNeighborsClassifier ()
knc.fit(x_train, y_train)
y_predict = knc.predict(x_test)
#使用K近邻分类器对测试数据进行类别预测,预测结果储存在变量y_predict中。
knc = KNeighborsClassifier ()
knc.fit(x_train, y_train)
y_predict = knc.predict (x_test)
#使用模型自带的评估函数进行准确性测评。
print('The accuracy of K- Nearest Neighbor Classifier is', knc.score(x_test,y_test))
The accuracy of K- Nearest Neighbor Classifier is 0.8947368421052632
#依然使用sklearn .metrics里面的classification report 模块对预测结果做更加详细的分析。
from sklearn .metrics import classification_report
print(classification_report(y_test, y_predict, target_names = iris.target_names))
             precision    recall  f1-score   support

     setosa       1.00      1.00      1.00         8
 versicolor       0.73      1.00      0.85        11
  virginica       1.00      0.79      0.88        19

avg / total       0.92      0.89      0.90        38

K近邻分类器对38条鸢尾花测试样本分类的准确性约为89.474%,平均精确率、召回率以及F1指标分别为0.92.0.89和0.90。

K近邻属于无参数模型中非常简单一种。然而,正是这样的决策算法,导致了其非常高的计算复杂度和内存消耗。因为该模型每处理一个测试样本,都需要对所有预先加载在内存的训练样本进行遍历、逐一计算相似度、排序并且选取.K个最近邻训练样本的标记,进而做出分类决策。这是平方级别的算法复杂度,一旦数据规模稍大,使用者便需要权衡更多计算时间的代价。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据科学CLUB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据载入
  • 数据处理
  • 构建模型
  • 模型评估
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档