版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
機(jī)器學(xué)習(xí):K-近鄰算法(KNN):KNN算法的R語言實(shí)現(xiàn)1機(jī)器學(xué)習(xí):K-近鄰算法(KNN):KNN算法的R語言實(shí)現(xiàn)1.1簡介1.1.1KNN算法的基本原理K-近鄰算法(K-NearestNeighbors,KNN)是一種基于實(shí)例的學(xué)習(xí)方法,它不進(jìn)行顯式的訓(xùn)練過程,而是將數(shù)據(jù)集中的所有樣本作為訓(xùn)練實(shí)例保存。當(dāng)有新的輸入數(shù)據(jù)時(shí),KNN算法會(huì)根據(jù)輸入數(shù)據(jù)在特征空間中的位置,找到距離它最近的K個(gè)訓(xùn)練實(shí)例,然后根據(jù)這K個(gè)實(shí)例的類別來預(yù)測輸入數(shù)據(jù)的類別。在分類任務(wù)中,通常采用多數(shù)表決的方式?jīng)Q定輸入數(shù)據(jù)的類別;在回歸任務(wù)中,則采用這K個(gè)實(shí)例的平均值或加權(quán)平均值作為預(yù)測值。示例代碼#加載數(shù)據(jù)集
data(iris)
iris_data<-iris[,1:4]
iris_label<-iris[,5]
#數(shù)據(jù)預(yù)處理
library(caret)
iris_data<-preProcess(iris_data,method=c("center","scale"))
iris_data<-predict(iris_data,iris[,1:4])
#劃分訓(xùn)練集和測試集
set.seed(123)
train_index<-createDataPartition(iris_label,p=0.8,list=FALSE)
train_data<-iris_data[train_index,]
test_data<-iris_data[-train_index,]
train_label<-iris_label[train_index]
test_label<-iris_label[-train_index]
#KNN分類
library(class)
knn_result<-knn(train=train_data,test=test_data,cl=train_label,k=5)
#模型評(píng)估
library(caret)
confusionMatrix(knn_result,test_label)這段代碼首先加載了iris數(shù)據(jù)集,然后進(jìn)行了數(shù)據(jù)預(yù)處理,包括中心化和標(biāo)準(zhǔn)化。接著,代碼將數(shù)據(jù)集劃分為訓(xùn)練集和測試集,使用class包中的knn函數(shù)進(jìn)行KNN分類,最后使用caret包中的confusionMatrix函數(shù)評(píng)估模型的性能。1.1.2KNN算法在分類與回歸中的應(yīng)用KNN算法可以應(yīng)用于分類和回歸任務(wù)。在分類任務(wù)中,KNN算法通過計(jì)算輸入數(shù)據(jù)與訓(xùn)練數(shù)據(jù)之間的距離,找到距離最近的K個(gè)訓(xùn)練實(shí)例,然后根據(jù)這K個(gè)實(shí)例的類別進(jìn)行多數(shù)表決,以決定輸入數(shù)據(jù)的類別。在回歸任務(wù)中,KNN算法同樣通過計(jì)算距離找到K個(gè)最近的訓(xùn)練實(shí)例,但預(yù)測值是這K個(gè)實(shí)例的平均值或加權(quán)平均值。示例代碼#加載回歸數(shù)據(jù)集
data(airquality)
airquality_data<-airquality[,c("Ozone","Solar.R","Wind","Temp")]
airquality_label<-airquality[,1]
#數(shù)據(jù)預(yù)處理
airquality_data<-preProcess(airquality_data,method=c("center","scale"))
airquality_data<-predict(airquality_data,airquality[,c("Ozone","Solar.R","Wind","Temp")])
#劃分訓(xùn)練集和測試集
set.seed(123)
train_index<-createDataPartition(airquality_label,p=0.8,list=FALSE)
train_data<-airquality_data[train_index,]
test_data<-airquality_data[-train_index,]
train_label<-airquality_label[train_index]
test_label<-airquality_label[-train_index]
#KNN回歸
library(FNN)
knn_result<-kNN(train=train_data,test=test_data,y=train_label,k=5)
#模型評(píng)估
library(caret)
RMSE(knn_result,test_label)此代碼示例展示了如何使用KNN算法進(jìn)行回歸任務(wù)。它使用了airquality數(shù)據(jù)集,預(yù)處理數(shù)據(jù)后,將數(shù)據(jù)集劃分為訓(xùn)練集和測試集。然后,使用FNN包中的kNN函數(shù)進(jìn)行KNN回歸,最后使用caret包中的RMSE函數(shù)評(píng)估模型的預(yù)測誤差。1.1.3KNN算法的優(yōu)缺點(diǎn)KNN算法的優(yōu)點(diǎn)包括:-算法簡單,易于理解和實(shí)現(xiàn)。-無需訓(xùn)練過程,可以處理非線性問題。-對(duì)異常值不敏感。KNN算法的缺點(diǎn)包括:-計(jì)算量大,尤其是當(dāng)數(shù)據(jù)集很大時(shí)。-需要選擇合適的K值,不同的K值可能對(duì)模型性能產(chǎn)生顯著影響。-對(duì)于不平衡的數(shù)據(jù)集,KNN算法可能表現(xiàn)不佳。示例代碼#生成不平衡數(shù)據(jù)集
unbalanced_data<-rbind(iris_data[1:100,],iris_data[121:150,])
unbalanced_label<-c(iris_label[1:100],iris_label[121:150])
#KNN分類
knn_result_unbalanced<-knn(train=unbalanced_data,test=test_data,cl=unbalanced_label,k=5)
#模型評(píng)估
confusionMatrix(knn_result_unbalanced,test_label)這段代碼展示了當(dāng)數(shù)據(jù)集不平衡時(shí),KNN算法可能面臨的挑戰(zhàn)。通過生成一個(gè)不平衡的數(shù)據(jù)集,可以看到模型在少數(shù)類上的預(yù)測性能可能會(huì)下降。1.2總結(jié)KNN算法是一種簡單但強(qiáng)大的機(jī)器學(xué)習(xí)方法,適用于分類和回歸任務(wù)。通過計(jì)算距離和選擇最近的鄰居,KNN能夠做出預(yù)測。然而,它也存在計(jì)算效率和K值選擇的挑戰(zhàn),特別是在處理大規(guī)模數(shù)據(jù)集和不平衡數(shù)據(jù)集時(shí)。通過上述代碼示例,我們不僅理解了KNN的基本原理,還學(xué)會(huì)了如何在R語言中實(shí)現(xiàn)KNN算法,并評(píng)估其性能。2R語言基礎(chǔ)2.1R語言環(huán)境搭建與基本操作在開始使用R語言進(jìn)行數(shù)據(jù)分析和機(jī)器學(xué)習(xí)之前,首先需要搭建R語言的環(huán)境。R語言是一個(gè)免費(fèi)且開源的統(tǒng)計(jì)計(jì)算和圖形軟件環(huán)境,廣泛應(yīng)用于數(shù)據(jù)科學(xué)領(lǐng)域。以下是如何在Windows系統(tǒng)上搭建R語言環(huán)境的步驟:下載R語言:訪問R語言的官方網(wǎng)站/,選擇適合你操作系統(tǒng)的版本進(jìn)行下載。安裝R語言:運(yùn)行下載的安裝程序,按照默認(rèn)設(shè)置完成安裝。安裝RStudio:RStudio是一個(gè)非常流行的R語言集成開發(fā)環(huán)境(IDE),它提供了更友好的用戶界面。訪問RStudio官網(wǎng)/下載并安裝RStudio。啟動(dòng)RStudio:安裝完成后,打開RStudio,你將看到一個(gè)包含多個(gè)窗格的界面,包括控制臺(tái)、文件管理器、幫助文檔和圖形界面。2.1.1R語言基本操作R語言提供了豐富的數(shù)據(jù)結(jié)構(gòu)和函數(shù),以下是一些基本操作的示例:#創(chuàng)建向量
vec<-c(1,2,3,4,5)
print(vec)
#創(chuàng)建矩陣
mat<-matrix(1:6,nrow=2,ncol=3)
print(mat)
#創(chuàng)建數(shù)據(jù)框
df<-data.frame(name=c("Alice","Bob"),age=c(25,30))
print(df)
#安裝和加載包
install.packages("ggplot2")
library(ggplot2)2.2數(shù)據(jù)導(dǎo)入與預(yù)處理在進(jìn)行數(shù)據(jù)分析或機(jī)器學(xué)習(xí)之前,數(shù)據(jù)的導(dǎo)入和預(yù)處理是必不可少的步驟。R語言提供了多種方式來導(dǎo)入數(shù)據(jù),包括從CSV、Excel、SQL數(shù)據(jù)庫等。2.2.1導(dǎo)入CSV數(shù)據(jù)#導(dǎo)入CSV文件
data<-read.csv("data.csv")
print(head(data))#查看數(shù)據(jù)的前幾行2.2.2數(shù)據(jù)預(yù)處理數(shù)據(jù)預(yù)處理包括數(shù)據(jù)清洗、缺失值處理、數(shù)據(jù)轉(zhuǎn)換等步驟。以下是一個(gè)簡單的數(shù)據(jù)預(yù)處理示例:#處理缺失值
data$age[is.na(data$age)]<-mean(data$age,na.rm=TRUE)
#轉(zhuǎn)換數(shù)據(jù)類型
data$age<-eger(data$age)
#刪除重復(fù)行
data<-unique(data)2.3使用R進(jìn)行數(shù)據(jù)可視化數(shù)據(jù)可視化是數(shù)據(jù)分析的重要組成部分,它可以幫助我們更好地理解數(shù)據(jù)。R語言中的ggplot2包是一個(gè)強(qiáng)大的繪圖工具,可以創(chuàng)建各種類型的圖表。2.3.1創(chuàng)建散點(diǎn)圖#創(chuàng)建散點(diǎn)圖
ggplot(data,aes(x=age,y=salary))+
geom_point()+
labs(title="AgevsSalary",x="Age",y="Salary")2.3.2創(chuàng)建直方圖#創(chuàng)建直方圖
ggplot(data,aes(x=salary))+
geom_histogram(binwidth=1000,color="black",fill="blue")+
labs(title="SalaryDistribution",x="Salary",y="Frequency")通過以上步驟,你已經(jīng)掌握了R語言的基礎(chǔ)環(huán)境搭建、基本操作、數(shù)據(jù)導(dǎo)入預(yù)處理以及數(shù)據(jù)可視化的方法。這些技能是進(jìn)行更復(fù)雜的數(shù)據(jù)分析和機(jī)器學(xué)習(xí)項(xiàng)目的基礎(chǔ)。接下來,你可以進(jìn)一步學(xué)習(xí)如何使用R語言進(jìn)行更高級(jí)的數(shù)據(jù)分析和建模。3機(jī)器學(xué)習(xí):K-近鄰算法(KNN):KNN算法的R語言實(shí)現(xiàn)3.1安裝與加載KNN相關(guān)的R包在R中實(shí)現(xiàn)KNN算法,我們通常會(huì)使用class和caret包。class包提供了knn函數(shù),而caret包則提供了更多的模型訓(xùn)練和評(píng)估工具,包括K值的選擇和模型優(yōu)化。3.1.1安裝R包#安裝class和caret包
install.packages("class")
install.packages("caret")3.1.2加載R包#加載class和caret包
library(class)
library(caret)3.2使用R包實(shí)現(xiàn)KNN分類KNN分類算法基于實(shí)例學(xué)習(xí),預(yù)測新樣本的類別是通過其在特征空間中最近的K個(gè)鄰居的類別來決定的。3.2.1數(shù)據(jù)準(zhǔn)備假設(shè)我們有一個(gè)數(shù)據(jù)集iris,我們將使用它來預(yù)測花的種類。#加載iris數(shù)據(jù)集
data(iris)
#分割數(shù)據(jù)集為訓(xùn)練集和測試集
set.seed(123)
trainIndex<-createDataPartition(iris$Species,p=0.8,list=FALSE)
trainData<-iris[trainIndex,]
testData<-iris[-trainIndex,]3.2.2KNN分類使用knn函數(shù)進(jìn)行分類預(yù)測。#使用knn進(jìn)行分類
k<-5
knnModel<-knn(train=trainData[,1:4],
test=testData[,1:4],
cl=trainData[,5],
k=k)3.2.3預(yù)測與評(píng)估評(píng)估模型的準(zhǔn)確性。#預(yù)測結(jié)果與實(shí)際結(jié)果的比較
confusionMatrix(knnModel,testData$Species)3.3使用R包實(shí)現(xiàn)KNN回歸KNN回歸算法與分類類似,但預(yù)測的是連續(xù)值。3.3.1數(shù)據(jù)準(zhǔn)備假設(shè)我們有一個(gè)回歸數(shù)據(jù)集mtcars,我們將使用它來預(yù)測汽車的mpg值。#加載mtcars數(shù)據(jù)集
data(mtcars)
#分割數(shù)據(jù)集為訓(xùn)練集和測試集
set.seed(123)
trainIndex<-createDataPartition(mtcars$mpg,p=0.8,list=FALSE)
trainData<-mtcars[trainIndex,]
testData<-mtcars[-trainIndex,]3.3.2KNN回歸使用knnreg函數(shù)進(jìn)行回歸預(yù)測。#使用knnreg進(jìn)行回歸
k<-5
knnRegModel<-knnreg(train=trainData[,2:11],
test=testData[,2:11],
y=trainData[,1],
k=k)3.3.3預(yù)測與評(píng)估評(píng)估模型的預(yù)測性能。#預(yù)測結(jié)果
predictions<-predict(knnRegModel,testData[,2:11])
#評(píng)估預(yù)測性能
postResample(predictions,testData$mpg)3.4K值的選擇與模型優(yōu)化選擇合適的K值對(duì)于KNN模型的性能至關(guān)重要。3.4.1K值的選擇使用交叉驗(yàn)證來選擇最佳的K值。#設(shè)置控制參數(shù)
control<-trainControl(method="cv",number=10)
#調(diào)整K值
knnTune<-train(x=trainData[,1:4],
y=trainData[,5],
method="knn",
trControl=control,
tuneLength=10)3.4.2模型優(yōu)化基于調(diào)整后的K值,優(yōu)化模型。#最佳K值
bestK<-knnTune$bestTune$k
#使用最佳K值重新訓(xùn)練模型
knnOptModel<-knn(train=trainData[,1:4],
test=testData[,1:4],
cl=trainData[,5],
k=bestK)3.4.3性能評(píng)估再次評(píng)估模型的性能。#評(píng)估優(yōu)化后的模型性能
confusionMatrix(knnOptModel,testData$Species)通過以上步驟,我們不僅實(shí)現(xiàn)了KNN算法在R中的應(yīng)用,還通過調(diào)整K值優(yōu)化了模型的性能。這為理解和應(yīng)用KNN算法提供了堅(jiān)實(shí)的基礎(chǔ)。4案例分析4.1subdir4.1:Iris數(shù)據(jù)集上的KNN分類實(shí)戰(zhàn)在本節(jié)中,我們將使用R語言和著名的Iris數(shù)據(jù)集來實(shí)現(xiàn)K-近鄰算法(KNN)進(jìn)行分類。Iris數(shù)據(jù)集包含了150個(gè)樣本,每個(gè)樣本有4個(gè)特征:萼片長度、萼片寬度、花瓣長度和花瓣寬度,以及一個(gè)類別標(biāo)簽,指示該樣本屬于三種鳶尾花中的哪一種。4.1.1數(shù)據(jù)準(zhǔn)備首先,我們需要加載數(shù)據(jù)并進(jìn)行預(yù)處理。#加載必要的庫
library(class)
library(caret)
#加載Iris數(shù)據(jù)集
data(iris)
#將數(shù)據(jù)集分為訓(xùn)練集和測試集
set.seed(123)
trainIndex<-createDataPartition(iris$Species,p=0.7,list=FALSE)
trainData<-iris[trainIndex,]
testData<-iris[-trainIndex,]4.1.2KNN模型訓(xùn)練接下來,我們將使用class包中的knn函數(shù)來訓(xùn)練KNN模型。#定義K值
k<-5
#使用knn函數(shù)進(jìn)行分類
predictedSpecies<-knn(train=trainData[,1:4],
test=testData[,1:4],
cl=trainData[,5],
k=k)4.1.3結(jié)果評(píng)估最后,我們將評(píng)估模型的準(zhǔn)確性。#比較預(yù)測結(jié)果和實(shí)際結(jié)果
confusionMatrix(predictedSpecies,testData$Species)4.2subdir4.2:波士頓房價(jià)數(shù)據(jù)集上的KNN回歸實(shí)戰(zhàn)在回歸問題中,KNN算法預(yù)測的是連續(xù)值。我們將使用波士頓房價(jià)數(shù)據(jù)集來演示KNN回歸。4.2.1數(shù)據(jù)準(zhǔn)備首先,加載數(shù)據(jù)并進(jìn)行預(yù)處理。#加載必要的庫
library(MASS)
library(caret)
#加載波士頓房價(jià)數(shù)據(jù)集
data(Boston)
#將數(shù)據(jù)集分為訓(xùn)練集和測試集
set.seed(123)
trainIndex<-createDataPartition(Boston$medv,p=0.7,list=FALSE)
trainData<-Boston[trainIndex,]
testData<-Boston[-trainIndex,]4.2.2KNN模型訓(xùn)練使用caret包中的knnreg函數(shù)來訓(xùn)練KNN回歸模型。#定義K值
k<-7
#使用knnreg函數(shù)進(jìn)行回歸
knnModel<-knnreg(train=trainData[,-14],
y=trainData$medv,
k=k)
#預(yù)測測試集的房價(jià)
predictedPrice<-predict(knnModel,newdata=testData[,-14])4.2.3結(jié)果評(píng)估評(píng)估模型的預(yù)測性能。#計(jì)算均方誤差
mse<-mean((predictedPrice-testData$medv)^2)
mse4.3subdir4.3:模型評(píng)估與結(jié)果解釋模型評(píng)估是機(jī)器學(xué)習(xí)中至關(guān)重要的一步,它幫助我們理解模型的性能和可靠性。4.3.1評(píng)估指標(biāo)對(duì)于分類問題,我們通常使用準(zhǔn)確率、召回率、F1分?jǐn)?shù)等指標(biāo)。對(duì)于回歸問題,我們關(guān)注均方誤差(MSE)、均方根誤差(RMSE)和R^2分?jǐn)?shù)。4.3.2結(jié)果解釋準(zhǔn)確率:表示分類正確的樣本占總樣本的比例。MSE:表示預(yù)測值與真實(shí)值之間的平均平方差,值越小表示模型預(yù)測越準(zhǔn)確。RMSE:MSE的平方根,更直觀地反映了預(yù)測誤差的大小。R^2分?jǐn)?shù):表示模型解釋了數(shù)據(jù)中多少變異,值越接近1表示模型擬合越好。4.3.3選擇合適的K值K值的選擇對(duì)KNN模型的性能有顯著影響。較小的K值會(huì)使模型對(duì)噪聲更敏感,而較大的K值則可能忽略數(shù)據(jù)的局部特征。通常,我們通過交叉驗(yàn)證來選擇最優(yōu)的K值。#使用caret包進(jìn)行交叉驗(yàn)證選擇K值
kTune<-train(x=trainData[,1:4],
y=trainData[,5],
method="knn",
preProcess=c("center","scale"),
tuneLength=10,
trControl=trainControl(method="cv",number=10))
#輸出最優(yōu)K值
kTune$bestTune$k通過上述步驟,我們不僅實(shí)現(xiàn)了KNN算法在R語言中的應(yīng)用,還學(xué)會(huì)了如何評(píng)估模型性能和選擇最優(yōu)的K值。這為我們?cè)趯?shí)際問題中應(yīng)用KNN算法提供了堅(jiān)實(shí)的基礎(chǔ)。5進(jìn)階技巧5.1距離度量的選擇在K-近鄰算法中,選擇合適的距離度量對(duì)于算法的性能至關(guān)重要。不同的距離度量可以捕捉到數(shù)據(jù)的不同特性,從而影響分類或回歸的準(zhǔn)確性。R語言提供了多種計(jì)算距離的函數(shù),如dist(),可以靈活地選擇不同的度量方式。5.1.1歐氏距離歐氏距離是最直觀的距離度量方式,適用于數(shù)值型特征。它計(jì)算兩個(gè)點(diǎn)在多維空間中的直線距離。#示例數(shù)據(jù)
data<-matrix(c(1,2,2,3,3,4),nrow=3,byrow=TRUE)
#計(jì)算歐氏距離
dist_euclidean<-dist(data,method="euclidean")
print(dist_euclidean)5.1.2曼哈頓距離曼哈頓距離,也稱為城市街區(qū)距離,適用于特征空間中各維度具有不同物理意義的情況。它計(jì)算兩個(gè)點(diǎn)在多維空間中沿軸方向的總距離。#計(jì)算曼哈頓距離
dist_manhattan<-dist(data,method="manhattan")
print(dist_manhattan)5.1.3馬氏距離馬氏距離考慮了數(shù)據(jù)的協(xié)方差結(jié)構(gòu),適用于特征之間存在相關(guān)性的數(shù)據(jù)集。它衡量了兩個(gè)點(diǎn)在多維空間中的標(biāo)準(zhǔn)化距離。#示例數(shù)據(jù),包含協(xié)方差
data_cov<-matrix(c(1,2,2,3,3,4,4,5,5,6,6,7),nrow=3,byrow=TRUE)
#計(jì)算馬氏距離
dist_mahalanobis<-mahalanobis(data_cov,colMeans(data_cov),cov(data_cov))
print(dist_mahalanobis)5.2權(quán)重分配策略KNN算法中,權(quán)重分配策略可以提高預(yù)測的準(zhǔn)確性。通常,距離更近的鄰居對(duì)預(yù)測結(jié)果的影響更大。5.2.1均等權(quán)重這是最簡單的權(quán)重策略,所有鄰居的權(quán)重相等。#均等權(quán)重的KNN預(yù)測
library(class)
#假設(shè)訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)
train_data<-matrix(c(1,2,2,3,3,4),nrow=3,byrow=TRUE)
train_labels<-c("A","B","A")
test_data<-matrix(c(1.5,2.5),nrow=1,byrow=TRUE)
#KNN預(yù)測
knn_prediction<-knn(train_data,test_data,train_labels,k=3)
print(knn_prediction)5.2.2距離加權(quán)距離加權(quán)策略中,鄰居的權(quán)重與它們到測試點(diǎn)的距離成反比。#距離加權(quán)的KNN預(yù)測
#自定義距離加權(quán)函數(shù)
knn_weighted<-function(train,test,labels,k){
dists<-as.matrix(dist(rbind(train,test),method="euclidean"))
dists<-dists[nrow(dists),1:nrow(train)]
weights<-1/dists
weights<-weights/sum(weights)
sorted_indices<-order(dists)
top_k_indices<-sorted_indices[1:k]
top_k_weights<-weights[top_k_indices]
top_k_labels<-labels[top_k_indices]
prediction<-weighted.mean(top_k_labels,top_k_weights)
return(round(prediction))
}
#示例數(shù)據(jù)
train_data<-matrix(c(1,2,2,3,3,4),nrow=3,byrow=TRUE)
train_labels<-c(1,2,1)
test_data<-matrix(c(1.5,2.5),nrow=1,byrow=TRUE)
#距離加權(quán)KNN預(yù)測
knn_weighted_prediction<-knn_weighted(train_data,test_data,train_labels,k=3)
print(knn_weighted_prediction)5.3處理不平衡數(shù)據(jù)集在現(xiàn)實(shí)世界的數(shù)據(jù)集中,各類別的樣本數(shù)量可能不均衡,這被稱為不平衡數(shù)據(jù)集問題。在KNN中,這可能導(dǎo)致預(yù)測偏向于樣本數(shù)量較多的類別。5.3.1重采樣重采樣技術(shù)包括過采樣和欠采樣,可以調(diào)整各類別樣本的數(shù)量,以達(dá)到平衡。過采樣#過采樣
library(DMwR)
#假設(shè)訓(xùn)練數(shù)據(jù)和標(biāo)簽
train_data_imbalanced<-matrix(c(1,2,2,3,3,4,4,5,5,6),nrow=5,byrow=TRUE)
train_labels_imbalanced<-c("A","A","A","B","B")
#過采樣
train_data_balanced<-SMOTE(train_data_imbalanced,train_labels_imbalanced,perc.over=100,k=5)欠采樣#欠采樣
library(caret)
#欠采樣
train_data_balanced<-downSample(train_data_imbalanced,train_labels_imbalanced)5.3.2成本敏感學(xué)習(xí)在KNN中,可以通過調(diào)整不同類別預(yù)測錯(cuò)誤的成本,來處理不平衡數(shù)據(jù)集問題。#成本敏感學(xué)習(xí)
#自定義預(yù)測函數(shù),考慮類別成本
knn_cost_sensitive<-function(train,test,labels,k,costs){
dists<-as.matrix(dist(rbind(train,test),method="euclidean"))
dists<-dists[nrow(dists),1:nrow(train)]
sorted_indices<-order(dists)
top_k_indices<-sorted_indices[1:k]
top_k_labels<-labels[top_k_indices]
#計(jì)算成本
cost<-sapply(top_k_labels,function(x)costs[x])
#預(yù)測類別
prediction<-which.min(cost)
return(prediction)
}
#示例數(shù)據(jù)
train_data_imbalanced<-matrix(c(1,2,2,3,3,4,4,5,5,6),nrow=5,byrow=TRUE)
train_labels_imbalanced<-c("A","A","A","B","B")
test_data<-matrix(c(1.5,2.5),nrow=1,byrow=TRUE)
#類別成本
costs<-c(A=1,B=2)
#成本敏感KNN預(yù)測
knn_cost_sensitive_prediction<-knn_cost_sensitive(train_data_imbalanced,test_data,train_labels_imbalanced,k=3,costs)
print(knn_cost_sensitive_prediction)通過上述進(jìn)階技巧,可以顯著提高KNN算法在復(fù)雜數(shù)據(jù)集上的性能和準(zhǔn)確性。6總結(jié)與實(shí)踐6.11KNN算法的總結(jié)回顧K-近鄰算法(K-NearestNeighbors,KNN)是一種基于實(shí)例的學(xué)習(xí)方法,用于分類和回歸。在分類問題中,KNN通過計(jì)算待分類樣本與訓(xùn)練集中所有樣本的距離,選取距離最近的K
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑涂料工程皮卡租賃合同
- 藥物研發(fā)學(xué)徒技能提升計(jì)劃
- 貿(mào)易余款償還協(xié)議
- 2022年大學(xué)能源動(dòng)力專業(yè)大學(xué)物理下冊(cè)月考試卷A卷-附解析
- 結(jié)直腸狹窄內(nèi)鏡治療
- 垃圾問題與學(xué)校教育的整合與創(chuàng)新
- 2022年大學(xué)電子信息科學(xué)專業(yè)大學(xué)物理二期中考試試卷-含答案
- 2022年大學(xué)環(huán)境生態(tài)專業(yè)大學(xué)物理二期末考試試卷D卷-含答案
- 消化道疾病的護(hù)理常規(guī)
- 智能餐廳解決方案
- 《DNA計(jì)算模型》課件
- 新冠病毒知識(shí)培訓(xùn)課件
- 《眩暈的鑒別診斷》課件
- 光伏逆變器的交流并網(wǎng)調(diào)試方法
- 中國傳統(tǒng)的主流思想
- 易制毒從業(yè)人員培訓(xùn)課件
- 倉庫降本增效方案培訓(xùn)課件
- 氫能與燃料電池-課件-第五章-制氫技術(shù)
- 用色彩表達(dá)情感課件
- 區(qū)塊鏈技術(shù)在供應(yīng)鏈金融中的應(yīng)用
- (完整)中小學(xué)教師職稱評(píng)定答辯題
評(píng)論
0/150
提交評(píng)論