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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

K-近邻算法之K值的选择(带案例)

發布時間:2024/3/12 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 K-近邻算法之K值的选择(带案例) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

三、K值的選擇

K值選擇問題,李航博士的一書「統計學習方法」上所說:

  • 選擇較小的K值,就相當于用較小的領域中的訓練實例進行預測,“學習”近似誤差會減小,只有與輸入實例較近或相似的訓練實例才會對預測結果起作用,與此同時帶來的問題是“學習”的估計誤差會增大,換句話說,K值的減小就意味著整體模型變得復雜,容易發生過擬合;

  • 選擇較大的K值,就相當于用較大領域中的訓練實例進行預測,其優點是可以減少學習的估計誤差,但缺點是學習的近似誤差會增大。這時候,與輸入實例較遠(不相似的)訓練實例也會對預測器作用,使預測發生錯誤,且K值的增大就意味著整體的模型變得簡單。

  • K=N(N為訓練樣本個數),則完全不足取,因為此時無論輸入實例是什么,都只是簡單的預測它屬于在訓練實例中最多的類,模型過于簡單,忽略了訓練實例中大量有用信息。

  • 實際應用中,K值一般取一個比較小的數值,例如采用交叉驗證法(簡單來說,就是把訓練數據在分成兩組:訓練集和驗證集)來選擇最優的K值。

    • 近似誤差:
      • 對現有訓練集的訓練誤差,關注訓練集
      • 如果近似誤差過小可能會出現過擬合的現象,對現有的訓練集能有很好的預測,但是對未知的測試樣本將會出現較大偏差的預測。
      • 模型本身不是最接近最佳模型。
    • 估計誤差:
      • 可以理解為對測試集的測試誤差,關注測試集,
      • 估計誤差小說明對未知數據的預測能力好,
      • 模型本身最接近最佳模型。

    KNN中K值大小選擇對模型的影響

    • k值過小:
      • 容易受到異常點的影響
      • 容易過擬合
      • 模型過于復雜
    • k值過大:
      • 受到樣本均衡的問題
      • 容易欠擬合
      • 模型過于簡單

    四、案例1:鳶尾花種類預測

    1)scikit-learn數據集API介紹
    • sklearn.datasets
      • 加載獲取流行數據集
      • datasets.load_*()
        • 獲取小規模數據集,數據包含在datasets中
      • datasets.fetch_*(data_home=None)
        • 獲取大規模數據,需要從網上下載,函數的第一個參數就是data-Home表示數據集的下載目錄。默認是~/scikit_learn_data/
    2)scikit-learn小數據集
    • sklearn.datasets.load_iris()

      加載并返回鳶尾花數據集

    3)scikit-learn大數據集
    • sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)

      • subset:“train"或者"test”,"all"可選,選擇需要加載的數據集
      • 訓練集的"訓練",測試集的”測試“,兩者的"全部"
    4)sklearn數據集返回值介紹
    • load_fetch返回的數據類型都是datasets.base.Bunch(字段格式)
      • data:特征數據數組
      • target:標簽數組
      • DESCR:數據描述
      • feature_names:特征名字
      • target_names:標簽名字
    from sklearn.datasets import load_iris# 獲取鳶尾花數據集 iris = load_iris() print("鳶尾花數據集的返回值:\n", iris) # 返回值是一個繼承自字典的Bench print("鳶尾花的特征值:\n", iris.data) print("鳶尾花的目標值:\n", iris.target) print("鳶尾花特征的名字:\n", iris.feature_names) print("鳶尾花目標值的名字:\n", iris.target_names) print("鳶尾花的描述:\n", iris.DESCR)
    5)查看數據分布
    • seaborn介紹
      • Seaborn是基于Matplotlib核心庫對其進行了更高級的API封裝,可以輕松畫出更漂亮的圖形。而Seabor的漂亮主要體現在配色更加舒服以及圖形元素的樣式更加細膩。
      • 安裝pip3 install seaborn
      • seaborn.Implot()是一個非常有用的方法,它在繪制二維散點圖的時候,自動完成回歸擬合。
        • sns.Implot(x,y): x,y分別代表橫縱坐標的列名
        • data 關聯的數據集
        • hut 代表按照什么分類方式顯示
        • fit_reg 是否進行線性擬合
    import seaborn as sns import matplotlib.pyplot as plt import pandas as pdiris = load_iris() iris_d = pd.DataFrame(iris.data,columns=['Sepal_Length', 'Sepal_Width', 'Petal_Length', 'Petal_Width']) iris_d['Species'] = iris.targetdef plot_iris(iris,col1,col2):sns.lmplot(x = col1, y = col2,data=iris,hue='Species',fit_reg=False)plt.xlabel(col1)plt.ylabel(col2)plt.title("鳶尾花種類分布圖!!")plt.show()plot_iris(iris_d,'Petal_Width','Sepal_Length')
    6)數據集的劃分

    一般數據集劃分為兩個部分:

    • 訓練數據:用于訓練,構建模型
    • 測試數據:用于模型檢驗,評估模型是否有效

    劃分比例:

    • 訓練集:70%~80%
    • 測試集:20%~30%
    數據集劃分的API
    • sklearn.model_selection.train_test_split(arrays,*options)
      • 參數:
        • x 數據集的特征值
        • y 數據集的標簽值
        • test_size 測試繼的大小,一般為float
        • random_state 隨機數種子。不同的種子會造成不同的隨機結果,相同的種子結果相同
      • return
        • x_train,x_test,y_train,y_test
    from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split# 1.獲取鳶尾花數據集 iris = load_iris() # 對鳶尾花數據集進行分割 # 訓練特征值、測試特征值、訓練目標值、測試目標值 x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=22) print("x_train:\n", x_train.shape)

    總結

    以上是生活随笔為你收集整理的K-近邻算法之K值的选择(带案例)的全部內容,希望文章能夠幫你解決所遇到的問題。

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