国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

機(jī)器學(xué)習(xí)-KNN算法(鳶尾花分類(lèi)實(shí)戰(zhàn))

這篇具有很好參考價(jià)值的文章主要介紹了機(jī)器學(xué)習(xí)-KNN算法(鳶尾花分類(lèi)實(shí)戰(zhàn))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到網(wǎng)站。

簡(jiǎn)介


K近鄰(K Nearest Neighbors,KNN)算法是最簡(jiǎn)單的分類(lèi)算法之一,也就是根據(jù)現(xiàn)有訓(xùn)練數(shù)據(jù)判斷輸入樣本是屬于哪一個(gè)類(lèi)別。

“近朱者赤近墨者黑",所謂的K近鄰,也就是根據(jù)樣本相鄰最近的K個(gè)數(shù)據(jù)來(lái)進(jìn)行判斷,看K個(gè)鄰居中所屬類(lèi)別最多的是哪一類(lèi),則將該樣本分為這一類(lèi)。

算法原理很簡(jiǎn)單,如下圖,K取3時(shí),輸入數(shù)據(jù)為紅色點(diǎn),在它最近的3個(gè)鄰居點(diǎn)中,有2個(gè)黃色1個(gè)藍(lán)色,故應(yīng)把它分類(lèi)為黃色這一類(lèi)。

機(jī)器學(xué)習(xí)-KNN算法(鳶尾花分類(lèi)實(shí)戰(zhàn))

可以看出K的取值應(yīng)為奇數(shù),避免K近鄰中有相同個(gè)數(shù)的類(lèi)別,同時(shí)也不能為類(lèi)別數(shù)的倍數(shù),如3分類(lèi)中K取3時(shí),出現(xiàn)1:1:1無(wú)法分類(lèi)的情況。注意如果K過(guò)小可能造成過(guò)擬合。

此外距離的定義公式也有很多,這里不再贅述,根據(jù)實(shí)際場(chǎng)景進(jìn)行甄選,一般使用歐式距離更多,即 d i s t ( x , y ) = ∑ i = 1 n ( x i ? y i ) 2 dist(x,y)=\sqrt{\sum_{i=1}^n(x_i-y_i)^2} dist(x,y)=i=1n?(xi??yi?)2 ?

代碼復(fù)現(xiàn)


  1. 數(shù)據(jù)處理

采用典中典——鳶尾花數(shù)據(jù)集,Kaggle中有上傳鳶尾花數(shù)據(jù)(下載鏈接)
鳶尾花數(shù)據(jù)集包含四個(gè)特征,和三種鳶尾花標(biāo)簽類(lèi)別,共150條數(shù)據(jù)。
機(jī)器學(xué)習(xí)-KNN算法(鳶尾花分類(lèi)實(shí)戰(zhàn))

采用sepal length和petal width兩個(gè)特征,你也可以采用其他特征。
使用pandas讀取數(shù)據(jù),不懂pandas可以參考我這篇:Pandas光速入門(mén)-一文掌握數(shù)據(jù)操作

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split

data = pd.read_csv("D:\\Iris_flower_dataset.csv")
x = np.array(data.iloc[:, [1, 4]])
y_tmp = np.array(data["Species"])
y = []
label = ["Iris-setosa", "Iris-virginica", "Iris-versicolor"]
for i in y_tmp:  # 將英文壓為整型
    if i == label[0]:
        y.append(0)
    elif i == label[1]:
        y.append(1)
    else:
        y.append(2)
y = np.array(y)
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=2022)
# 訓(xùn)練集可視化
plt.scatter(x_train[:, 0], x_train[:, 1], c=y_train)
plt.xlabel("sepal length[cm]")  # 設(shè)置x軸名
plt.ylabel("petal width[cm]")  # 設(shè)置y軸名
plt.show()

機(jī)器學(xué)習(xí)-KNN算法(鳶尾花分類(lèi)實(shí)戰(zhàn))
可視化可參考:Matplotlib光速入門(mén)-從安裝到繪圖實(shí)戰(zhàn)

插播反爬信息 )博主CSDN地址:https://wzlodq.blog.csdn.net/

  1. KNN定義

只考慮兩個(gè)特征,就簡(jiǎn)單化處理了,即用 ( x 1 ? x 2 ) 2 + ( y 1 ? y 2 ) 2 \sqrt{(x_1-x_2)^2+(y_1-y_2)^2} (x1??x2?)2+(y1??y2?)2 ?

class KNN(object):

    def __init__(self, k):  # 初始化函數(shù)
        self.k = k

    def fit(self, x, y):  # 載入訓(xùn)練集
        self.x = x
        self.y = y

    def _distance(self, v1, v2):  # 歐式距離
        return np.sum(np.square(v1 - v2))  # (不開(kāi)根號(hào)節(jié)省算力,效果一致

    def predict(self, x):
        y_pre = []
        for i in range(len(x)):  # x是測(cè)試集,是一個(gè)n維特征數(shù)組
            dist_arr = [self._distance(x[i], self.x[j]) for j in range(len(self.x))]  # 計(jì)算距離
            sorted_index = np.argsort(dist_arr)  # 排序
            top_k_index = sorted_index[:self.k]  # 得到K近鄰
            nearest = self._count(y_top_k=self.y[top_k_index])  # 根據(jù)K近鄰分類(lèi)做出預(yù)測(cè)
            y_pre.append(nearest)  # 加入預(yù)測(cè)答案
        return np.array(y_pre)

    def _count(self, y_top_k):  # 統(tǒng)計(jì)各分類(lèi)數(shù)量
        y_map = {}
        for y in y_top_k:
            if y not in y_map.keys():
                y_map[y] = 1  # 首次不在字典則置1
            else:
                y_map[y] += 1  # 否則value++
        sorted_vote_dict = sorted(y_map.items(), key=operator.itemgetter(1), reverse=True)  # 排序
        return sorted_vote_dict[0][0]  # 返回?cái)?shù)量最多的分類(lèi)
  1. 測(cè)試
if __name__ == "__main__":
	# 數(shù)據(jù)處理
    data = pd.read_csv("D:\\Iris_flower_dataset.csv")
    x = np.array(data.iloc[:, [1, 4]])
    y_tmp = np.array(data["Species"])
    y = []
    label = ["Iris-setosa", "Iris-virginica", "Iris-versicolor"]
    for i in y_tmp:  # 將英文壓為整型
        if i == label[0]:
            y.append(0)
        elif i == label[1]:
            y.append(1)
        else:
            y.append(2)
    y = np.array(y)
    x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=2022)
    # 創(chuàng)建KNN對(duì)象
    clf = KNN(5)
    # 訓(xùn)練
    clf.fit(x_train, y_train)
    # 測(cè)試
    pre_test = clf.predict(x_test)
    # 計(jì)算正確率
    correct = np.count_nonzero((pre_test == y_test) == True)
    print("正確率:%.3f" % (correct / len(pre_test)))

機(jī)器學(xué)習(xí)-KNN算法(鳶尾花分類(lèi)實(shí)戰(zhàn))

  1. 結(jié)果可視化
    # 結(jié)果可視化
    plt.scatter(x_train[:, 0], x_train[:, 1], c=y_train, alpha=0.3)
    for i in range(len(x_test)):
        if pre_test[i] == y_test[i]:  # 正確標(biāo)綠
            plt.scatter(x_test[i][0], x_test[i][1], color="green")
        else:  # 錯(cuò)誤標(biāo)紅
            plt.scatter(x_test[i][0], x_test[i][1], color="red")
    plt.xlabel("sepal length[cm]")  # 設(shè)置x軸名
    plt.ylabel("petal width[cm]")  # 設(shè)置y軸名
    plt.show()

機(jī)器學(xué)習(xí)-KNN算法(鳶尾花分類(lèi)實(shí)戰(zhàn))
半透明的是訓(xùn)練數(shù)據(jù),測(cè)試數(shù)據(jù)中,綠色是分類(lèi)正確的點(diǎn),紅色是分類(lèi)錯(cuò)誤的點(diǎn),可以看出上圖只錯(cuò)了一個(gè)。

sklearn庫(kù)調(diào)用


使用sklearn封裝函數(shù)可以非常方便的實(shí)現(xiàn):

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 載入數(shù)據(jù)
iris = datasets.load_iris()  # 已經(jīng)內(nèi)置了鳶尾花數(shù)據(jù)集
x = iris.data  # 輸入4個(gè)特征
y = iris.target  # 輸出類(lèi)別

# 隨機(jī)劃分?jǐn)?shù)據(jù)集,默認(rèn)25%測(cè)試集75%訓(xùn)練集
x_train, x_test, y_train, y_test = train_test_split(x, y)

# 創(chuàng)建一個(gè)KNN分類(lèi)器對(duì)象,并設(shè)置K=5,
clf = KNeighborsClassifier(n_neighbors=5)  # clf意為Classifier

# 訓(xùn)練
clf.fit(x_train, y_train)  # 用訓(xùn)練數(shù)據(jù)擬合分類(lèi)器模型

# 測(cè)試
pre_test = clf.predict(x_test)  # 得到測(cè)試集的預(yù)測(cè)結(jié)果

# 計(jì)算正確率
print('正確率:%.3f' % accuracy_score(y_test, pre_test))
# 由于數(shù)據(jù)集是隨機(jī)劃分,每次得到正確率自然不同,可以設(shè)置random_state讓隨機(jī)一致

機(jī)器學(xué)習(xí)-KNN算法(鳶尾花分類(lèi)實(shí)戰(zhàn))
直接調(diào)用庫(kù)函數(shù)簡(jiǎn)直不要太方便,蕪湖起飛(~ ̄▽?zhuān)?~

原創(chuàng)不易,請(qǐng)勿轉(zhuǎn)載本不富裕的訪問(wèn)量雪上加霜
博主首頁(yè):https://wzlodq.blog.csdn.net/
來(lái)都來(lái)了,不評(píng)論兩句嗎??
如果文章對(duì)你有幫助,記得一鍵三連?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-403223.html

到了這里,關(guān)于機(jī)器學(xué)習(xí)-KNN算法(鳶尾花分類(lèi)實(shí)戰(zhàn))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MapReduce實(shí)現(xiàn)KNN算法分類(lèi)推測(cè)鳶尾花種類(lèi)

    MapReduce實(shí)現(xiàn)KNN算法分類(lèi)推測(cè)鳶尾花種類(lèi)

    https://gitcode.net/m0_56745306/knn_classifier.git 該部分內(nèi)容參考自:https://zhuanlan.zhihu.com/p/45453761 KNN(K-Nearest Neighbor) 算法是機(jī)器學(xué)習(xí)算法中最基礎(chǔ)、最簡(jiǎn)單的算法之一。它既能用于分類(lèi),也能用于回歸。KNN通過(guò)測(cè)量不同特征值之間的距離來(lái)進(jìn)行分類(lèi)。 KNN算法的思想非常簡(jiǎn)單:對(duì)于任

    2024年02月08日
    瀏覽(20)
  • 經(jīng)典案例——利用 KNN算法 對(duì)鳶尾花進(jìn)行分類(lèi)

    經(jīng)典案例——利用 KNN算法 對(duì)鳶尾花進(jìn)行分類(lèi)

    實(shí)現(xiàn)流程: ? ? ? ? 1、獲取數(shù)據(jù)集 ????????2、數(shù)據(jù)基本處理 ????????3、數(shù)據(jù)集預(yù)處理-數(shù)據(jù)標(biāo)準(zhǔn)化 ????????4、機(jī)器學(xué)習(xí)(模型訓(xùn)練) ????????5、模型評(píng)估 ????????6、模型預(yù)測(cè) 具體API: 1、獲取數(shù)據(jù)集 ?查看各項(xiàng)屬性 ?2、數(shù)據(jù)基本處理 ? 3、數(shù)據(jù)集預(yù)處理

    2024年02月02日
    瀏覽(20)
  • 【機(jī)器學(xué)習(xí)算法】KNN鳶尾花種類(lèi)預(yù)測(cè)案例和特征預(yù)處理。全md文檔筆記(已分享,附代碼)

    【機(jī)器學(xué)習(xí)算法】KNN鳶尾花種類(lèi)預(yù)測(cè)案例和特征預(yù)處理。全md文檔筆記(已分享,附代碼)

    本系列文章md筆記(已分享)主要討論機(jī)器學(xué)習(xí)算法相關(guān)知識(shí)。機(jī)器學(xué)習(xí)算法文章筆記以算法、案例為驅(qū)動(dòng)的學(xué)習(xí),伴隨淺顯易懂的數(shù)學(xué)知識(shí),讓大家掌握機(jī)器學(xué)習(xí)常見(jiàn)算法原理,應(yīng)用Scikit-learn實(shí)現(xiàn)機(jī)器學(xué)習(xí)算法的應(yīng)用,結(jié)合場(chǎng)景解決實(shí)際問(wèn)題。包括K-近鄰算法,線性回歸,邏

    2024年02月19日
    瀏覽(28)
  • 【機(jī)器學(xué)習(xí)案例】不同的模型算法對(duì)鳶尾花數(shù)據(jù)集進(jìn)行分類(lèi)

    【機(jī)器學(xué)習(xí)案例】不同的模型算法對(duì)鳶尾花數(shù)據(jù)集進(jìn)行分類(lèi)

    經(jīng)典機(jī)器學(xué)習(xí)入門(mén)項(xiàng)目,使用邏輯回歸、線性判別分析、KNN、分類(lèi)與回歸樹(shù)、樸素貝葉斯、向量機(jī)、隨機(jī)森林、梯度提升決策樹(shù)對(duì)不同占比的訓(xùn)練集進(jìn)行分類(lèi) 數(shù)據(jù)源 :Iris Species | Kaggle 150行,5列,分三種鳶尾花類(lèi)型,每種類(lèi)型50個(gè)樣本,每行數(shù)據(jù)包含花萼長(zhǎng)度、花萼寬度、花

    2024年02月04日
    瀏覽(28)
  • 【機(jī)器學(xué)習(xí)】鳶尾花分類(lèi)-邏輯回歸示例

    功能: 這段代碼演示了如何使用邏輯回歸對(duì)鳶尾花數(shù)據(jù)集進(jìn)行訓(xùn)練,并將訓(xùn)練好的模型保存到文件中。然后,它允許用戶(hù)輸入新的鳶尾花特征數(shù)據(jù),使用保存的模型進(jìn)行預(yù)測(cè),并輸出預(yù)測(cè)結(jié)果。 步驟概述: 加載數(shù)據(jù)和預(yù)處理: 使用 Scikit-Learn 中的 datasets 模塊加載鳶尾花數(shù)據(jù)

    2024年02月10日
    瀏覽(25)
  • 機(jī)器學(xué)習(xí)實(shí)驗(yàn)3——支持向量機(jī)分類(lèi)鳶尾花

    機(jī)器學(xué)習(xí)實(shí)驗(yàn)3——支持向量機(jī)分類(lèi)鳶尾花

    基于鳶尾花數(shù)據(jù)集,完成關(guān)于支持向量機(jī)的分類(lèi)模型訓(xùn)練、測(cè)試與評(píng)估。 代碼 認(rèn)識(shí)數(shù)據(jù) 屬性:花萼長(zhǎng)度,花萼寬度,花瓣長(zhǎng)度,花瓣寬度 分類(lèi):Setosa,Versicolour,Virginica 相關(guān)性分析 如下圖,可以直觀看到花瓣寬度(Petal Width)和花瓣長(zhǎng)度(Petal Length)存在很高的正相關(guān)性,

    2024年01月24日
    瀏覽(28)
  • 【機(jī)器學(xué)習(xí)實(shí)例講解】機(jī)器學(xué)習(xí)-鳶尾花數(shù)據(jù)集多分類(lèi)第02課

    【機(jī)器學(xué)習(xí)實(shí)例講解】機(jī)器學(xué)習(xí)-鳶尾花數(shù)據(jù)集多分類(lèi)第02課

    問(wèn)題定義與理解: 明確機(jī)器學(xué)習(xí)任務(wù)的目標(biāo),是分類(lèi)、回歸、聚類(lèi)、強(qiáng)化學(xué)習(xí)還是其他類(lèi)型的問(wèn)題。 確定業(yè)務(wù)背景和需求,了解所處理數(shù)據(jù)的現(xiàn)實(shí)意義。 數(shù)據(jù)收集: 根據(jù)任務(wù)目標(biāo)從各種來(lái)源獲取原始數(shù)據(jù),可以是數(shù)據(jù)庫(kù)、文件、傳感器、網(wǎng)絡(luò)日志等。 數(shù)據(jù)預(yù)處理: 數(shù)據(jù)清

    2024年01月18日
    瀏覽(63)
  • 初識(shí)機(jī)器學(xué)習(xí)——感知機(jī)(Perceptron)+ Python代碼實(shí)現(xiàn)鳶尾花分類(lèi)

    初識(shí)機(jī)器學(xué)習(xí)——感知機(jī)(Perceptron)+ Python代碼實(shí)現(xiàn)鳶尾花分類(lèi)

    ??假設(shè)輸入空間 χ ? R n chisubseteq R^n χ ? R n ,輸出空間為 γ = { + 1 , ? 1 } gamma=left { +1,-1right } γ = { + 1 , ? 1 } 。其中每一個(gè)輸入 x ? χ xsubseteq chi x ? χ 表示對(duì)應(yīng)于實(shí)例的特征向量,也就是對(duì)應(yīng)于輸入空間(特征空間)的一個(gè)點(diǎn), y ? γ ysubseteq gamma y ? γ 輸出表

    2023年04月08日
    瀏覽(28)
  • 【機(jī)器學(xué)習(xí)】決策樹(shù)案例二:利用決策樹(shù)進(jìn)行鳶尾花數(shù)據(jù)集分類(lèi)預(yù)測(cè)

    【機(jī)器學(xué)習(xí)】決策樹(shù)案例二:利用決策樹(shù)進(jìn)行鳶尾花數(shù)據(jù)集分類(lèi)預(yù)測(cè)

    手動(dòng)反爬蟲(chóng),禁止轉(zhuǎn)載: 原博地址 https://blog.csdn.net/lys_828/article/details/122045161(CSDN博主:Be_melting) 在進(jìn)行邏輯回歸分類(lèi)的過(guò)程中已經(jīng)有使用過(guò)iris數(shù)據(jù)集,這里直接加載數(shù)據(jù),并進(jìn)行字段名稱(chēng)的修改。 輸出結(jié)果如下。 通過(guò)info()方法查看各個(gè)字段的基本詳情,輸出結(jié)果如下。

    2024年02月08日
    瀏覽(30)
  • 機(jī)器學(xué)習(xí)實(shí)戰(zhàn)-系列教程8:SVM分類(lèi)實(shí)戰(zhàn)3非線性SVM(鳶尾花數(shù)據(jù)集/軟間隔/線性SVM/非線性SVM/scikit-learn框架)項(xiàng)目實(shí)戰(zhàn)、代碼解讀

    機(jī)器學(xué)習(xí)實(shí)戰(zhàn)-系列教程8:SVM分類(lèi)實(shí)戰(zhàn)3非線性SVM(鳶尾花數(shù)據(jù)集/軟間隔/線性SVM/非線性SVM/scikit-learn框架)項(xiàng)目實(shí)戰(zhàn)、代碼解讀

    本篇文章的代碼運(yùn)行界面均在Pycharm中進(jìn)行 本篇文章配套的代碼資源已經(jīng)上傳 SVM分類(lèi)實(shí)戰(zhàn)1之簡(jiǎn)單SVM分類(lèi) SVM分類(lèi)實(shí)戰(zhàn)2線性SVM SVM分類(lèi)實(shí)戰(zhàn)3非線性SVM 使用PolynomialFeatures模塊進(jìn)行預(yù)處理,使用這個(gè)可以增加數(shù)據(jù)維度 polynomial_svm_clf.fit(X,y)對(duì)當(dāng)前進(jìn)行訓(xùn)練傳進(jìn)去X和y數(shù)據(jù) SVM分類(lèi)實(shí)戰(zhàn)

    2024年02月07日
    瀏覽(29)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包