zoukankan      html  css  js  c++  java
  • 机器学习基础之knn的简单例子

    knn算法是人工智能的基本算法,类似于语言中的"hello world!",python中的机器学习核心模块:Scikit-Learn

    Scikit-learn(sklearn)模块,为Python语言实现机器学习的核心模块,其包含了大量的算法模型函数API,

    可以让我们很轻松地创建、训练、评估 算法模型。同时该模块也是Python在人工智能(机器学习)领域的基础应用模块。

    核心依赖模块:

    NumPy:pip install –U numpy

    Scipy:pip install –U scipy

    Pandas:pip install –U pandas

    Matplotlib:pip install –U matplotlib

    Scikit-Learn模块:

    Scikit-Learn:pip install –U scikit-learn

    机器学习分为五个步骤:

    1.算法选型 看选择监督学习还是无监督学习 

    2.样本数据划分 需要样本数据对模型进行训练

    3.魔性训练 使用fit()方法 算法模型对象.fit( X_train_features, X_train_labels )

    4.模型评估 metrics 使用sklearn中的 meterics 类可以实现对训练后的模型进行量化指标评估

    5.模型预测 predict Predict实现了对测试数据验证以及用于对新数据的预测

    KNN算法的简单应用,文档树:

    其中numbers.csv数据如下:

    number,classes
    1,A
    2,A
    3,A
    4,B
    5,B
    6,B
    7,C
    8,C
    9,C

    num_knn.py源码:

    from sklearn.neighbors import KNeighborsClassifier
    import numpy as np
    import matplotlib.pyplot as plt
    import os
    import pandas as pd
    import imp
    from sklearn.model_selection import train_test_split
    
    data=pd.read_csv(os.getcwd()+'data'+os.sep+'numbers.csv')
    print('原始数据:
    ',data)
    
    X_train,X_test,y_train,y_test=train_test_split(data['number'],data['classes'],test_size=0.25,random_state=40)
    print('训练特征值:
    ',X_train.values)
    print('训练标签值:
    ',y_train.values)
    print('测试特征值:
    ',X_test.values)
    print('测试标签值:
    ',y_test.values)
    #print(y_train)
    #print(y_test)
    
    plt.scatter(y_train,X_train)
    
    print('创建knn模型对象...')
    knn=KNeighborsClassifier(n_neighbors=3)
    
    print('开始训练knn模型...')
    knn.fit(X_train.values.reshape(len(X_train),1),y_train)
    #print(X_train.values)
    #print(X_train.values.reshape(len(X_train),1)) #变成列向量
    
    # 评估函数
    # 算法对象.score(测试特征值数据, 测试标签值数据)
    score=knn.score(X_test.values.reshape(len(X_test),1),y_test)
    print('模型训练综合得分:',score)
    
    # 步骤6:模型预测
    # predict()函数实现
    # predict(新数据(二维数组类型)): 分类结果
    result = knn.predict([[12],[1.5]])
    print('分类预测的结果为:{0},{1}'.format(result[0],result[1]))
    
    # 绘制测试数据点
    plt.scatter(result[0], 12, color='r')
    plt.scatter(result[1], 1.5, color='g')
    plt.grid(linestyle='--')
    plt.show()

    运行结果如下图:

    KNN第二个例子:

    movies.csv:

    filename,war_count,love_count,movietype
    movieA,3,104,爱情片
    movieB,2,100,爱情片
    movieC,1,81,爱情片
    movieD,101,10,战争片
    movieF,99,5,战争片
    movieF,98,2,战争片

    movie_knn.py:

    import pandas as pd
    import os
    import imp
    #导入分解词
    from sklearn.model_selection import train_test_split
    #导入knn算法模型
    from sklearn.neighbors import KNeighborsClassifier
    # 导入分类器性能监测报告模块
    from sklearn.metrics import classification_report
    
    
    def loaddata(filepath):  #加载数据
        data=pd.read_csv(filepath)
        print('样本数据集:
    ',data)
        #print('样本数据集:
    {0}'.format(data))
    
        # 步骤2:数据抽取
        # 获取war_count、love_count、movietype列数据
        data = data[['war_count', 'love_count', 'movietype']]
        print('原始样本数据集(数据抽取):
    {0}'.format(data))
    
        # 返回数据
        return data
    
    
    def splitdata(data):
        print('--数据划分--')
        X_train,X_test,y_train,y_test=train_test_split(data[['war_count','love_count']],data['movietype'],
                                                       test_size=0.25,random_state=30)
        print('训练样本特征集:
    ', X_train.values)
        print('训练样本标签集:
    ', X_test.values)
        print('测试样本特征集:
    ', y_train.values)
        print('测试样本标签集:
    ', y_test.values)
    
        # 返回数据
        return X_train, X_test, y_train, y_test
    
    
    def ModelTraing(X_train,X_test,y_train,y_yest):
        #先创建knn算法模型
        print('knn算法模型...')
        knn=KNeighborsClassifier(n_neighbors=3)
    
        #训练算法模型
        print('算法模型训练...')
        knn.fit(X_train,y_train)
    
        #训练模型评估
        result=knn.predict(X_test)
        print('knn训练模型测试报告:
    ')
        print(classification_report(y_test,result,target_names=data['movietype'].unique()))
    
        return knn
    
    
    if __name__=='__main__':
        # 设置数据文件的地址
        filePath = os.getcwd() + 'data' + os.sep + 'movies.csv'
        print(filePath)
        # 加载数据文件
        data = loaddata(filePath)
        # 数据划分
        X_train, X_test, y_train, y_test = splitdata(data)
        # 模型训练
        knn = ModelTraing(X_train, X_test, y_train, y_test)
        # 模型应用
        movietype = knn.predict([[20, 94]])
        print('电影分类预测结果为:{0}'.format(movietype[0]))

    代码运行结果:

     附上GitHub地址 tyutltf/knn_basic: knn的简单例子  https://github.com/tyutltf/knn_basic

  • 相关阅读:
    多线程的几种实现方法详解
    Java线程编程中isAlive()和join()的使用详解
    MyEclipse在不同编辑面间快速切换
    MyEclipse中设置代码块快捷键
    MyEclipse设置文件编码
    Oracle安装后遇到错误:The Network Adapter could not establish the connection
    Java中的Runtime类
    Java中接口的特点
    Java中三种常见的注释(注解) Annotation
    Java中的泛型
  • 原文地址:https://www.cnblogs.com/yuxuanlian/p/9910091.html
Copyright © 2011-2022 走看看