機器學習基礎之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]))

代碼運行結果:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM