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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

机器学习接口和代码之 KNN

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习接口和代码之 KNN 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

官網地址:https://scikit-learn.org/stable/modules/classes.html#module-sklearn.neighbors?

class sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, weights=’uniform’, algorithm=’auto’, leaf_size=30, p=2, metric=’minkowski’, metric_params=None, n_jobs=None, **kwargs)參數:n_neighbors : int,optional(default = 5)默認情況下kneighbors查詢使用的鄰居數。就是k-NN的k的值,選取最近的k個點。weights : str或callable,可選(默認=‘uniform’)默認是uniform,參數可以是uniform、distance,也可以是用戶自己定義的函數。uniform是均等的權重,就說所有的鄰近點的權重都是相等的。distance是不均等的權重,距離近的點比距離遠的點的影響大。用戶自定義的函數,接收距離的數組,返回一組維數相同的權重。algorithm : {‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可選快速k近鄰搜索算法,默認參數為auto,可以理解為算法自己決定合適的搜索算法。除此之外,用戶也可以自己指定搜索算法ball_tree、kd_tree、brute方法進行搜索,brute是蠻力搜索,也就是線性掃描,當訓練集很大時,計算非常耗時。kd_tree,構造kd樹存儲數據以便對其進行快速檢索的樹形數據結構,kd樹也就是數據結構中的二叉樹。以中值切分構造的樹,每個結點是一個超矩形,在維數小于20時效率高。ball tree是為了克服kd樹高緯失效而發明的,其構造過程是以質心C和半徑r分割樣本空間,每個節點是一個超球體。leaf_size : int,optional(默認值= 30)默認是30,這個是構造的kd樹和ball樹的大小。這個值的設置會影響樹構建的速度和搜索速度,同樣也影響著存儲樹所需的內存大小。需要根據問題的性質選擇最優的大小。p : 整數,可選(默認= 2)距離度量公式。這個參數默認為2,也就是默認使用歐式距離公式進行距離度量。也可以設置為1,使用曼哈頓距離公式進行距離度量。metric : 字符串或可調用,默認為’minkowski’用于距離度量,默認度量是minkowski,也就是p=2的歐氏距離(歐幾里德度量)。聯合 上述P 使用metric_params : dict,optional(默認=None)距離公式的其他關鍵參數,這個可以不管,使用默認的None即可。n_jobs : int或None,可選(默認=None)并行處理設置。默認為1,臨近點搜索并行工作數。如果為-1,那么CPU的所有cores都用于并行工作。

方法名及含義

  • fit(X, y)使用X作為訓練數據,y作為目標值(類似于標簽)來擬合模型。
  • get_params([deep])獲取估值器的參數。
  • kneighbors([X, n_neighbors, return_distance])查找一個或幾個點的K個鄰居。
  • kneighbors_graph([X, n_neighbors, mode])計算在X數組中每個點的k鄰居的(權重)圖。
  • predict(X)給提供的數據預測對應的標簽。
  • predict_proba(X)返回測試數據X的概率估值。
  • score(X, y[, sample_weight])返回給定測試數據和標簽的平均準確值。
  • set_params(**params)設置估值器的參數。

示例一:鳶尾花數據分類

import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt import pandas as pd import warningsimport sklearn from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier#KNN from sklearn.preprocessing import label_binarize from sklearn import metrics## 設置字符集,防止中文亂碼 mpl.rcParams['font.sans-serif']=[u'simHei'] mpl.rcParams['axes.unicode_minus']=False## 數據加載 path = "datas/iris.data" names = ['sepal length', 'sepal width', 'petal length', 'petal width', 'cla'] df = pd.read_csv(path, header=None, names=names) print(df['cla'].value_counts()) print(df.head())def parseRecord(record):r = zip(names,record)for name,v in r:if name == 'cla':if v == 'Iris-setosa':record['cla'] = 1elif v == 'Iris-versicolor':record['cla'] = 2elif v == 'Iris-virginica':record['cla'] = 3else:record['cla'] = np.nanreturn record### 1. 數據轉換為數字以及分割 ## 數據轉換 datas = df.apply(lambda r: parseRecord(r), axis=1) ## 異常數據刪除 datas = datas.dropna(how='any') ## 數據分割 print(datas) print(datas.shape) X = datas[names[0:-2]] Y = datas[names[-1]] ## 數據抽樣(訓練數據和測試數據分割) X_train,X_test,Y_train,Y_test = train_test_split(X, Y, test_size=0.4, random_state=0)print ("原始數據條數:%d;訓練數據條數:%d;特征個數:%d;測試樣本條數:%d" % (len(X), len(X_train), X_train.shape[1], X_test.shape[0]))##### KNN算法實現 # a. 模型構建 # 模型中介紹的K值:n_neighbors knn = KNeighborsClassifier(n_neighbors=3) knn.fit(X_train, Y_train)# b. 模型效果輸出 ## 將正確的數據轉換為矩陣形式 y_test_hot = label_binarize(Y_test,classes=(1,2,3)) ## 得到預測屬于某個類別的概率值 knn_y_score = knn.predict_proba(X_test) ## 計算roc的值 knn_fpr, knn_tpr, knn_threasholds = metrics.roc_curve(y_test_hot.ravel(),knn_y_score.ravel()) ## 計算auc的值 knn_auc = metrics.auc(knn_fpr, knn_tpr) print ("KNN算法R值:", knn.score(X_train, Y_train)) print ("KNN算法AUC值:", knn_auc)# c. 模型預測 knn_y_predict = knn.predict(X_test)## 畫圖2:預測結果畫圖 x_test_len = range(len(X_test)) plt.figure(figsize=(12, 9), facecolor='w') plt.ylim(0.5,3.5) plt.plot(x_test_len, Y_test, 'ro',markersize = 6, zorder=3, label=u'真實值') plt.plot(x_test_len, knn_y_predict, 'yo', markersize = 16, zorder=1, label=u'KNN算法預測值,$R^2$=%.3f' % knn.score(X_test, Y_test)) plt.legend(loc = 'lower right') plt.xlabel(u'數據編號', fontsize=18) plt.ylabel(u'種類', fontsize=18) plt.title(u'鳶尾花數據分類', fontsize=20) plt.show()

?

總結

以上是生活随笔為你收集整理的机器学习接口和代码之 KNN的全部內容,希望文章能夠幫你解決所遇到的問題。

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