日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习入门KNN近邻算法(一)

發布時間:2024/8/26 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习入门KNN近邻算法(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 機器學習處理流程:

2 機器學習分類:

  • 有監督學習

    主要用于決策支持,它利用有標識的歷史數據進行訓練,以實現對新數據的表示的預測

    1 分類

    分類計數預測的數據對象是離散的。如短信是否為垃圾短信,用戶是否喜歡電子產品

    常用方法: K近鄰、樸素貝葉斯、決策樹、SVM

    2 回歸

    回歸技術預測的數據對象是連續值。例如溫度變化或時間變化。包括一元回歸和多元回歸,線性回歸和非線性回歸

    常用方法: 線性回歸、邏輯回歸、嶺回歸

  • 無監督學習

    主要用于知識發現,在歷史數據中發現隱藏的模式或內在結構

    1 聚類

    聚類算法用于在數據中尋找隱藏的模式或分組。K-means

  • 半監督學習

    在半監督學習方式下,訓練數據有部分被標識,部分沒有被標識,這種模型首先需要學習數據的內在結構,以便合理的組織數據來進行預測。算法上,包括一些對常用監督式學習算法的延伸,這些算法首先試圖對未標識數據進行建模,在此基礎上再對標識的數據進行預測。

    常見方法: 深度學習

3 K-近鄰算法原理

  • KNN概述

    簡單來說,K-近鄰算法采用測量不同特征值之間的距離方法進行分類(k-Nearest Neighbor,KNN)

    優點: 精度高、對異常值不敏感、無數據輸入假定

    缺點: 時間復雜度高、空間復雜度高

    1、當樣本不平衡時,比如一個類的樣本容量很大,其他類的樣本容量很小,輸入一個樣本的時候,K個臨近值中大多數都是大樣本容量的那個類,這時可能就會導致分類錯誤。改進方法是對K臨近點進行加權,也就是距離近的點的權值大,距離遠的點權值小。

    2、計算量較大,每個待分類的樣本都要計算它到全部點的距離,根據距離排序才能求得K個臨近點,改進方法是:先對已知樣本點進行剪輯,事先去除對分類作用不大的樣本。

    適用數據范圍 : 數值型和標稱型

    1 標稱型:標稱型目標變量的結果只在有限目標集中取值,如真與假(標稱型目標變量主要用于分類)

    2 數值型:數值型目標變量則可以從無限的數值集合中取值,如0.100,42.001等 (數值型目標變量主要用于回歸分析)

  • 工作原理

    1 樣本訓練集

    2 電影類別KNN分析

    3 歐幾里得距離(歐式距離)

    4 KNN計算過程流程圖

    入門案例 : 電影類型分析

    電影名稱 動作鏡頭 接吻鏡頭 電影類別 0 前任三 2 15 愛情 1 復仇者聯盟 36 3 動作 2 殺破狼 24 1 動作 3 戰狼 29 2 動作 4 泰坦尼克號 1 18 愛情 5 大話西游 29 3 愛情 6 星愿 2 20 愛情 7 西游記 25 2 動作 8 七月與安生 3 19 愛情 import numpy as np import pandas as pd from pandas import Series,DataFrameimport matplotlib.pyplot as plt %matplotlib inline #從excel讀取數據 films = pd.read_excel('films.xlsx',sheet_name=1) train = films[['動作鏡頭','接吻鏡頭']] target = films['電影類別']# 創建機器學習模型 from sklearn.neighbors import KNeighborsClassifier knn = KNeighborsClassifier()# 對knn模型進行訓練 # 構建函數原型、構建損失函數、求損失函數最優解 knn.fit(train,target) ''' KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',metric_params=None, n_jobs=1, n_neighbors=5, p=2,weights='uniform') ''' #輸入兩個案例 cat = np.array([[3,16],[20,4]]) # 使用predict函數對數據進行預測 knn.predict(cat)plt.scatter(train.values[:,0],train.values[:,1]) plt.scatter(cat[:,0],cat[:,1],color='red')

    KNN近鄰機器學習案例2

    from sklearn.neighbors import KNeighborsClassifier import numpy as np #knn對象 neigh = KNeighborsClassifier(n_neighbors=3)#身高、體重、鞋的尺寸 X = np.array([[181,80,44],[177,70,43],[160,60,38],[154,54,37],[166,65,40],[190,90,47],[175,64,39],[177,70,40],[159,55,37],[171,75,42],[181,85,43]]) display(X) y = ['male','male','female','female','male','male','female','female','female','male','male']# 第1步:訓練數據 neigh.fit(X,y) # 第2步:預測數據 Z = neigh.predict(np.array([[190,70,43],[168,55,37]]))display(Z) #array(['male', 'female'], dtype='<U6') 識別出對應的性格

4 KNN用于分類

  • 用于分類的numpy方法介紹

    np.meshgrid 從坐標向量返回坐標矩陣

    import numpy as np nx, ny = 3, 4 x = np.linspace(0, 1, nx) y = np.linspace(0, 1, ny) xv, yv = np.meshgrid(x, y) display(x,y,xv,yv)

    輸出:
    array([ 0. , 0.5, 1. ])
    array([ 0. , 0.33333333, 0.66666667, 1. ])
    array([[ 0. , 0.5, 1. ],

    [ 0. , 0.5, 1. ],[ 0. , 0.5, 1. ],[ 0. , 0.5, 1. ]])

    array([[ 0. , 0. , 0. ],
    [ 0.33333333, 0.33333333, 0.33333333],
    [ 0.66666667, 0.66666667, 0.66666667],
    [ 1. , 1. , 1. ]])
    ```

    np.ravel 返回一個連續的平坦矩陣

    x = np.array([[1, 2, 3], [4, 5, 6]]) display(x,x.ravel())#輸出: array([[1, 2, 3],[4, 5, 6]]) array([1, 2, 3, 4, 5, 6])

    np.c_ 將切片對象按第二軸轉換為串聯

    np.c_[np.array([1,2,3]), np.array([4,5,6])]#輸出: array([[1, 4],[2, 5],[3, 6]])
  • 具體操作

    # 導入庫:KNeighborsClassifier import numpy as np from sklearn.neighbors import KNeighborsClassifier import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap# 導入sklearn自帶數據集 from sklearn import datasets# 得到訓練樣本 iris = datasets.load_iris() X = iris.data[:,:2] y = iris.target#定義三種顏色代表三種藍蝴蝶 cmap_species = ListedColormap(['#FF0000','#00FF00','#0000FF']) #c對應顏色池映射到target值 plt.scatter(X[:,0],X[:,1],c = y,cmap = cmap_species) plt.show()

    繪制圖形之后進行KNN

    #定義KNN分類器 clf = KNeighborsClassifier(n_neighbors=10)# 第1步:訓練分類器 clf.fit(X,y)# 圖片的顯示范圍,畫布的邊界范圍 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,0.02),np.arange(y_min,y_max,0.02))# 第2步:預測 ravel()數據扁平化 Z = clf.predict(np.c_[xx.ravel(),yy.ravel()]) z = Z.reshape(xx.shape)cmap_background = ListedColormap(['#FFAAAA','#AAFFAA','#AAAAFF']) # 顯示背景的顏色 plt.pcolormesh(xx,yy,z,cmap=cmap_background)# 顯示點的顏色 plt.scatter(X[:,0],X[:,1],c = y,cmap=cmap_species) plt.xlim(xx.min(),xx.max()) plt.ylim(yy.min(),yy.max()) plt.title('3-class classification') plt.show()

5 KNN用于回歸

import numpy as np import matplotlib.pyplot as plt from sklearn.neighbors import KNeighborsRegressor %matplotlib inlinex = np.linspace(0,2*np.pi,40) y = np.sin(x) plt.scatter(x,y) plt.xlabel('feature') plt.ylabel('target')# 隨機數種子,用于固定隨機數 np.random.seed(2) noise = np.random.random(size=20) - 0.5 y[::2] += noise plt.scatter(x,y)# 生成knn回歸模型 # n_neighbors 就是距離預測樣本最近的點的個數 knn = KNeighborsRegressor(n_neighbors=19) knn.fit(x.reshape(-1,1),y)# 獲取預測樣本集 # 預測數據的形狀應該和訓練數據的形狀一致(不要求數量一致,要求特征一致) X_test = np.linspace(0,2*np.pi,100).reshape(-1,1) y_ = knn.predict(X_test)plt.plot(X_test,y_,color='orange',label='predict') plt.scatter(x,y,color='blue',label='true-data') plt.legend()

# 創建多個算法模型,采用不同的參數,查看回歸的結果 knn1 = KNeighborsRegressor(n_neighbors=1) knn2 = KNeighborsRegressor(n_neighbors=7) knn3 = KNeighborsRegressor(n_neighbors=21)knn1.fit(x.reshape(-1,1),y) knn2.fit(x.reshape(-1,1),y) knn3.fit(x.reshape(-1,1),y)y1_ = knn1.predict(X_test) y2_ = knn2.predict(X_test) y3_ = knn3.predict(X_test)# 擬合度過高,稱為過擬合,對數據分析的過于在意局部特征 plt.plot(X_test,y1_,color='orange',label='n_neighbors=1') # 擬合度剛好,稱為最佳擬合,這是機器學習的終極目標,調參就是為了達到這個目的 plt.plot(X_test,y2_,color='cyan',label='n_neighbors=7') # 擬合度太差,稱為欠擬合,對數據特征分析不透徹,數據有效特征太少,樣本數量太少 plt.plot(X_test,y3_,color='red',label='n_neighbors=21') plt.scatter(x,y,color='blue',label='true-data') plt.legend()

轉載于:https://www.cnblogs.com/why957/p/9318410.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的机器学习入门KNN近邻算法(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。