柚子快報(bào)邀請(qǐng)碼778899分享:人工智能 機(jī)器學(xué)習(xí)知識(shí)點(diǎn)
柚子快報(bào)邀請(qǐng)碼778899分享:人工智能 機(jī)器學(xué)習(xí)知識(shí)點(diǎn)
1鳶尾花分類
鳶尾花分類問題是一個(gè)經(jīng)典的機(jī)器學(xué)習(xí)問題,旨在根據(jù)鳶尾花的花萼長(zhǎng)度、花萼寬度、花瓣長(zhǎng)度和花瓣寬度等特征,將鳶尾花分成三個(gè)品種:山鳶尾(setosa)、變色鳶尾(versicolor)和維吉尼亞鳶尾(virginica)。
這個(gè)問題常用的解決方法是使用機(jī)器學(xué)習(xí)算法來構(gòu)建一個(gè)分類器,然后使用該分類器對(duì)新的鳶尾花樣本進(jìn)行分類。常用的分類算法包括支持向量機(jī)(SVM)、K近鄰(K-Nearest Neighbors)、決策樹(Decision Tree)等。
在解決鳶尾花分類問題時(shí),通常采取以下步驟:
數(shù)據(jù)獲取與準(zhǔn)備:?首先,需要收集包含鳶尾花樣本的數(shù)據(jù)集,常用的是經(jīng)典的鳶尾花數(shù)據(jù)集,例如iris數(shù)據(jù)集。然后,對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,包括數(shù)據(jù)清洗、特征選擇、特征縮放等。 選擇模型:?選擇適合問題的分類模型,常見的包括支持向量機(jī)(SVM)、K近鄰(K-Nearest Neighbors)、決策樹(Decision Tree)、隨機(jī)森林(Random Forest)等。 訓(xùn)練模型:?使用訓(xùn)練數(shù)據(jù)對(duì)選擇的模型進(jìn)行訓(xùn)練,這一過程會(huì)使模型根據(jù)數(shù)據(jù)學(xué)習(xí)到相應(yīng)的規(guī)律或模式。 模型評(píng)估:?使用測(cè)試數(shù)據(jù)評(píng)估模型的性能,通常使用準(zhǔn)確率(Accuracy)、精確率(Precision)、召回率(Recall)、F1值等指標(biāo)來評(píng)估模型的表現(xiàn)。 模型調(diào)優(yōu):?根據(jù)評(píng)估結(jié)果,對(duì)模型進(jìn)行調(diào)優(yōu),例如調(diào)整模型的超參數(shù)、選擇更合適的特征等,以提高模型的性能。 模型應(yīng)用:?最終,將訓(xùn)練好的模型用于實(shí)際問題中,對(duì)新的鳶尾花樣本進(jìn)行分類預(yù)測(cè)。
題目描述:
要求:?鳶尾花分類問題,我們可以通過python的sklearn庫(kù),給出預(yù)測(cè)結(jié)果和實(shí)際值的對(duì)比,并且給出正確率評(píng)分。
1、導(dǎo)入sklearn庫(kù),包括需要用到的數(shù)據(jù)集dataset.load_iris()、svm分類器工具和、模型用到的數(shù)據(jù)集拆分工具。2、使用python命令導(dǎo)入數(shù)據(jù),并且設(shè)置好訓(xùn)練集和測(cè)試集。3、創(chuàng)建svm.LinearSVC分類器4、使用分類器clf的fit方法進(jìn)行擬合訓(xùn)練5、使用分類器clf的predict方法對(duì)測(cè)試集數(shù)據(jù)進(jìn)行預(yù)測(cè)6、對(duì)比測(cè)試集的預(yù)測(cè)結(jié)果和測(cè)試集的真實(shí)結(jié)果,并且使用clf的score方法獲得預(yù)測(cè)準(zhǔn)確率。
代碼:
from sklearn import datasets # 導(dǎo)入數(shù)據(jù)集模塊
from sklearn import svm # 導(dǎo)入支持向量機(jī)模塊
from sklearn.model_selection import train_test_split # 導(dǎo)入數(shù)據(jù)集拆分工具
# 加載鳶尾花數(shù)據(jù)集
iris = datasets.load_iris()
X = iris.data # 特征數(shù)據(jù)
y = iris.target # 類別標(biāo)簽
# 將數(shù)據(jù)集拆分為訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
# 創(chuàng)建線性支持向量機(jī)分類器
clf = svm.LinearSVC()
# 使用訓(xùn)練集訓(xùn)練分類器
clf.fit(X_train, y_train)
# 對(duì)測(cè)試集進(jìn)行預(yù)測(cè)
y_predict = clf.predict(X_test)
# 對(duì)比預(yù)測(cè)結(jié)果和真實(shí)結(jié)果,并輸出
comparison = ['預(yù)測(cè)值: ' + str(a) + ' 實(shí)際類別: ' + str(b) for a, b in zip(y_predict, y_test)]
for comp in comparison:
print(comp)
# 輸出分類器在測(cè)試集上的準(zhǔn)確率
print(f'準(zhǔn)確率:{clf.score(X_test, y_test)}')
?結(jié)果如圖:
?2 KNN算法
K近鄰(K-Nearest Neighbors,KNN)算法是一種基本的分類和回歸方法。其基本思想是:對(duì)于新的樣本數(shù)據(jù),通過計(jì)算其與訓(xùn)練集中的樣本的距離,然后選取距離最近的K個(gè)樣本,根據(jù)這K個(gè)樣本的類別(對(duì)于分類問題)或者值(對(duì)于回歸問題),通過多數(shù)表決或者加權(quán)平均的方式確定新樣本的類別或者值。
在KNN算法中,K是一個(gè)用戶定義的常數(shù),表示選擇最近鄰的數(shù)量。K的選擇會(huì)直接影響到算法的性能,一般來說,K值越小,模型對(duì)噪聲和孤立點(diǎn)的敏感度越高,而K值越大,模型的平滑程度越高,但也可能導(dǎo)致模型欠擬合。
KNN算法不需要顯式的訓(xùn)練過程,而是將訓(xùn)練集中的數(shù)據(jù)保存起來,當(dāng)需要對(duì)新的樣本進(jìn)行預(yù)測(cè)時(shí),直接在保存的數(shù)據(jù)集中進(jìn)行搜索和計(jì)算。因此,KNN算法是一種懶惰學(xué)習(xí)(lazy learning)算法。
KNN算法的優(yōu)點(diǎn)包括簡(jiǎn)單易懂、易于實(shí)現(xiàn)以及在訓(xùn)練集較大的情況下表現(xiàn)良好。然而,KNN算法的缺點(diǎn)也很明顯,主要包括對(duì)數(shù)據(jù)集的高度依賴、計(jì)算復(fù)雜度高、對(duì)于高維數(shù)據(jù)和大規(guī)模數(shù)據(jù)集的效率低下等。
題目描述:
使用K近鄰算法,構(gòu)建一個(gè)預(yù)測(cè)鳶尾花種類的模型。
要求
加載鳶尾花數(shù)據(jù)集對(duì)數(shù)據(jù)集進(jìn)行劃分:參數(shù)test_size=0.2,random_state=2構(gòu)建KNN模型:調(diào)用sklearn中的函數(shù)進(jìn)行構(gòu)建訓(xùn)練模型預(yù)測(cè)模型:選取測(cè)試集中的第3組數(shù)據(jù)(下標(biāo)為2)進(jìn)行預(yù)測(cè)輸出得到的預(yù)測(cè)值和真實(shí)值
代碼:
from sklearn import datasets # 導(dǎo)入數(shù)據(jù)集模塊
# 加載鳶尾花數(shù)據(jù)集
iris = datasets.load_iris()
x = iris.data # 特征數(shù)據(jù)
y = iris.target # 類別標(biāo)簽
# 劃分?jǐn)?shù)據(jù)集
from sklearn.model_selection import train_test_split
# 將數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=2)
# 構(gòu)建模型
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=3) # 使用K近鄰算法,設(shè)置鄰居數(shù)為3
# 訓(xùn)練模型
knn.fit(x_train, y_train)
# 模型預(yù)測(cè)
x_to_predict = x_test[2].reshape(1, -1) # 選取測(cè)試集中的第3組數(shù)據(jù)(下標(biāo)為2)進(jìn)行預(yù)測(cè)
y_predicted = knn.predict(x_to_predict)
# 輸出預(yù)測(cè)值和真實(shí)值
print("預(yù)測(cè)值:" + str(y_predicted)) # 輸出預(yù)測(cè)的類別
print("真實(shí)值:" + str(y_test[2])) # 輸出該樣本在測(cè)試集中的真實(shí)類別
結(jié)果如圖:
?3決策樹分類模型
決策樹是一種基于樹狀結(jié)構(gòu)的監(jiān)督學(xué)習(xí)算法,用于解決分類和回歸問題。在決策樹中,每個(gè)內(nèi)部節(jié)點(diǎn)表示一個(gè)特征屬性上的判斷條件,每個(gè)分支代表一個(gè)判斷結(jié)果,每個(gè)葉子節(jié)點(diǎn)表示最終的分類結(jié)果或數(shù)值預(yù)測(cè)結(jié)果。
決策樹的構(gòu)建過程是一個(gè)遞歸地選擇最佳特征進(jìn)行分裂的過程,直到滿足停止條件為止。在構(gòu)建決策樹時(shí),一般會(huì)使用信息增益、基尼不純度等指標(biāo)來選擇最佳的特征進(jìn)行分裂,以使得每次分裂后的數(shù)據(jù)集更加純凈(即同一類別的樣本更加集中)。
以下是決策樹分類的一些重要知識(shí)點(diǎn):
節(jié)點(diǎn)與葉子節(jié)點(diǎn):決策樹由節(jié)點(diǎn)和葉子節(jié)點(diǎn)組成。節(jié)點(diǎn)表示一個(gè)特征屬性上的判斷條件,葉子節(jié)點(diǎn)表示最終的分類結(jié)果。 分裂準(zhǔn)則:在構(gòu)建決策樹時(shí),需要確定節(jié)點(diǎn)分裂的準(zhǔn)則。常用的準(zhǔn)則包括信息增益、基尼不純度等,用于選擇最佳的特征進(jìn)行分裂。 剪枝:為了避免過擬合,決策樹需要進(jìn)行剪枝操作。剪枝可以分為預(yù)剪枝(在構(gòu)建樹的過程中進(jìn)行剪枝)和后剪枝(在構(gòu)建完整棵樹后再進(jìn)行剪枝)。 特征選擇:在每個(gè)節(jié)點(diǎn)上,需要選擇最佳的特征進(jìn)行分裂。常用的特征選擇方法有信息增益、基尼指數(shù)、方差等。 決策樹的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):易于理解和解釋,可視化效果好,能夠處理數(shù)值型和類別型數(shù)據(jù),對(duì)缺失值不敏感。缺點(diǎn):容易過擬合,對(duì)噪聲數(shù)據(jù)敏感,不穩(wěn)定,需要進(jìn)行剪枝操作。 集成學(xué)習(xí)中的應(yīng)用:決策樹常被用于集成學(xué)習(xí)方法中,如隨機(jī)森林和梯度提升樹。這些方法通過組合多個(gè)決策樹來提高分類準(zhǔn)確率和泛化能力。
題目描述:
對(duì)紅酒數(shù)據(jù)集創(chuàng)建決策樹分類模型,并輸出每個(gè)特征的評(píng)分。
要求
從sklearn的datasets模塊中導(dǎo)入load_wine 包,讀取紅酒數(shù)據(jù)集,轉(zhuǎn)換為DataFrame格式,將數(shù)據(jù)集劃分為特征樣本和標(biāo)簽樣本,使用該數(shù)據(jù)集建立決策樹分類模型,樹深設(shè)置為5,隨機(jī)種子設(shè)置為1,其他值設(shè)置為默認(rèn)值將數(shù)據(jù)放入模型中進(jìn)行訓(xùn)練,要求輸出每個(gè)特征的評(píng)分。
代碼:
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_wine
# 加載紅酒數(shù)據(jù)集
wine = load_wine()
# 創(chuàng)建DataFrame格式的特征樣本和標(biāo)簽樣本
x_train = pd.DataFrame(data=wine["data"], columns=wine["feature_names"]) # 特征樣本
y_train = wine["target"] # 標(biāo)簽樣本
# 建立決策樹分類模型
model = DecisionTreeClassifier(max_depth=5, random_state=1)
model.fit(x_train, y_train) # 模型訓(xùn)練
# 輸出每個(gè)特征的評(píng)分(特征重要性)
print("每個(gè)特征的評(píng)分(特征重要性):")
for feature, importance in zip(wine["feature_names"], model.feature_importances_):
print(f"{feature}:{importance:.4f}") # 對(duì)每個(gè)特征列進(jìn)行評(píng)分
柚子快報(bào)邀請(qǐng)碼778899分享:人工智能 機(jī)器學(xué)習(xí)知識(shí)點(diǎn)
推薦文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。