機器學習接口和代碼之 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()

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454275.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454275.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454275.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Eclipse中安裝Ext插件(Spket IDE)

在網上找了很多資料,這里重新整理一下。 Spket IDE是目前支持Ext 2.0最為出色的IDE。 它采用.jsb project file 文件并將繼承于基類和所有文檔的內容嵌入到生成代碼提示的. doc中。由于Spket只是一個單純的編輯器,沒有其它格式的支持(如CSS&a…

職業程序員培養之道

作者:粘新育 任甲林 來源:希賽網  http://www.csai.cn 2004年06月28日軟件開發是以人為核心的過程,對人的依賴性遠高于傳統的硬件生產企業,為了保持開發能力的穩定性,一方面需要定義軟件過程,以過程為樞紐…

MongoDB啟動

詳細見大神鏈接 鏈接: https://blog.csdn.net/chenpuzhen/article/details/90642147.

Go 語言編程規范

1. gofmt 命令 大部分的格式問題可以通過 gofmt 來解決,gofmt 自動格式化代碼,保證所有的 go 代碼與官方推薦的格式保持一致,所有格式有關問題,都以gofmt的結果為準。所以,建議在提交代碼庫之前先運行一下這個命令。 2…

python去噪音_python中的噪聲是什么意思

你的序列均值為零嗎? 方差隨時間變化嗎? 值與延遲值相關嗎? 你可以用一些工具來檢查你的時間序列是否為白噪音: 創建一個折線圖。檢查總體特征,如變化的平均值,方差或延遲變量之間的明顯關系。 計算匯總統計。對照序列中有意義的連續塊的均值和方差&a…

pycharm 離線安裝插件

插件離線下載地址: http://plugins.jetbrains.com/ 1、下載插件:http://plugins.jetbrains.com/ 2、安裝插件: settings -> plugins -> install plugin from disk,然后重啟IDEA即可。

為機器學習占地16

是將若干個學習器(分類器&回歸器)組合之后產生一個新學習器。弱分類器(weak learner)指那些分類準確率只稍微好于隨機猜測的分類器(errorrate < 0.5)。 集成算法的成功在于保證弱分類器的多樣性(Diversity)。而且集成不穩定的算法也能夠得到一個比較明顯的性能提升。 …

VC DLL學習

1 用VC創建DLL動態鏈接庫1.1 創建dll項目1.2 為dll項目編寫源文件頭文件dllDemo.hextern"C"_declspec(dllexport) intSum(inta,intb);//加法函數。extern"C"_declspec(dllexport) intMax(inta, intb);//取較大值函數extern"C"_declspec(dllexpor…

mciSendString 多線程播放多首音樂 注意事項

昨天晚上遇到一個問題&#xff1a; 使用 mciSendString 控制播放多首音樂的時候&#xff0c;出現最后一次播放的音樂無法通過 mciSendString ("close mp3") 關閉音樂的播放。 mciSendString 在多個線程中調用。 到23點&#xff0c;問題依然沒解決&#xff0c;只好先…

python代碼比例_Python如何輸出百分比

Python 輸出百分比的兩種方式 注&#xff1a; 在python3環境下測試。 方式1&#xff1a;直接使用參數格式化&#xff1a;{:.2%} {:.2%}&#xff1a; 顯示小數點后2位 顯示小數點后2位&#xff1a; >>> print(percent: {:.2%}.format(42/50)) percent: 84.00% 不顯示小…

為機器學習占地15

是將若干個學習器(分類器&回歸器)組合之后產生一個新學習器。弱分類器(weak learner)指那些分類準確率只稍微好于隨機猜測的分類器(errorrat弱分類器的多樣性(Diversity)。而且集成不穩定的算法也能夠得到一個比較明顯的性能提升。 常見的集成學習思想有&#xff1a;Baggi…

編寫一個項目開發文檔

項目開發過程中為了增加程序的可讀性和程序的健壯性&#xff0c; 方便后期程序的調試和維護&#xff0c;所以需要在開發過程中統一技術規范&#xff0c;一般會在項目初期確定好相關文檔作為這一統一的規范。不同公司會對文檔做不同要求&#xff0c;劃不同的分類&#xff0c;但一…

樂在其中設計模式(C#) - 原型模式(Prototype Pattern)

[索引頁][源碼下載]樂在其中設計模式(C#) - 原型模式(Prototype Pattern)作者&#xff1a;webabcd介紹用原型實例指定創建對象的種類&#xff0c;并且通過拷貝這個原型來創建新的對象。示例有一個Message實體類&#xff0c;現在要克隆它。MessageModelusing System; using Syst…

python123添加列表元素_Python之列表

Python變量沒有數據類型&#xff0c;所以Python沒有數組。 整數&#xff1b;浮點數&#xff1b;字符串&#xff1b;對象 創建一個列表&#xff1a; 1.member[大魚,123,3.14,[1,2,3]] 2.empty[] 向列表添加元素&#xff1a; append&#xff08;&#xff09;&#xff1a; member[…

為機器學習占地14

是將若干個學習器(分類器&回歸器)組合之后產生一個新學習器。弱分類器(weak learner)指那些分類準確率只稍微好于隨機猜測的分類器(errorrate <。 集成算法的成功在于保證弱分類器的多樣性(Diversity)。而且集成不穩定的算法也能夠得到一個比較明顯的性能提升。 常見的…

優秀程序員 分析提高能力 程序進階

我出生在南方的一個農村。還記得小時候家里是很窮的&#xff0c;那時候上學也很便宜&#xff0c;我已記不清初中以前的學費是多少了。反正從小在家里玩泥巴&#xff0c;有一日村里兩個女孩去上學&#xff0c;看到我就說一起去上學吧。當時一想&#xff0c;玩泥巴也厭煩了&#…

html中通過點擊button標簽實現頁面跳轉的三種方法

方法1&#xff1a;使用onclick事件 <input type"button" value"按鈕"onclick"javascrtpt:window.location.hrefhttp://www.baidu.com/" />或者直接使用button標簽 <button onclick"window.location.href https://www.baidu.com…

mybatis調用存儲過程

直接貼代碼吧 注解式可以調用 但是不能返回結果 所有我就貼配置式的 有知道注解怎么返回結果的請評論 數據庫代碼 #表 DROP TABLE IF EXISTS p_user; CREATE TABLE p_user (id int(11) NOT NULL AUTO_INCREMENT,name varchar(10) DEFAULT NULL,sex char(2) DEFAULT NULL,PRIMAR…

java dump分析工具_Java 性能分析工具 (2):Java 內置監控工具

引言本文為 Java 性能分析工具系列文章第二篇&#xff0c;第一篇&#xff1a;操作系統工具。在本文中將介紹如何使用 Java 內置監控工具更加深入的了解 Java 應用程序和 JVM 本身。在 JDK 中有許多內置的工具&#xff0c;其中包括&#xff1a;jcmd&#xff1a;打印一個 Java 進…

Linux+php+memcache+APC加速PHP網站

一、前言對于一個站長而言不僅要做好網站內容外&#xff0c;還需要對網站做優化&#xff0c;如果速度訪問很慢的&#xff0c;沒有人下次再訪問你的站點&#xff0c;目前國內使用php的網站不計其數&#xff0c;這里用我的博客為例&#xff1a;http://chinaapp.sinaapp.com 以加速…