机器学习基础之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('原始数据:\n',data)

X_train,X_test,y_train,y_test=train_test_split(data['number'],data['classes'],test_size=0.25,random_state=40)
print('训练特征值:\n',X_train.values)
print('训练标签值:\n',y_train.values)
print('测试特征值:\n',X_test.values)
print('测试标签值:\n',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('样本数据集:\n',data)
    #print('样本数据集:\n{0}'.format(data))

    # 步骤2:数据抽取
    # 获取war_count、love_count、movietype列数据
    data = data[['war_count', 'love_count', 'movietype']]
    print('原始样本数据集(数据抽取):\n{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('训练样本特征集:\n', X_train.values)
    print('训练样本标签集:\n', X_test.values)
    print('测试样本特征集:\n', y_train.values)
    print('测试样本标签集:\n', 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训练模型测试报告:\n')
    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]))

代码运行结果: