[英]Classification using R in a data set with numeric and categorical variables
我正在處理一個非常大的數據集。(csv)
數據集由數值列和分類列組成。
其中一列是我的“目標列”,這意味着我想使用其他列來確定哪個值(3 個可能的已知值中)可能在“目標列”中。 最后檢查我的分類與真實數據。
我的問題:
我正在使用 R。
我試圖找到一種方法來選擇提供最佳分類的特征子集。 遍歷所有子集是不可能的。
有誰知道算法或能想出一種在 R 上做的方法嗎?
這似乎是一個分類問題。 在不知道目標的協變量數量的情況下,無法確定,但是神經網絡不能解決您的問題嗎?
您可以使用nnet 包,它使用前饋神經網絡並處理多個類。 擁有分類列不是問題,因為您可以只使用因子。
沒有數據樣本,我只能解釋一下,但主要是使用函數:
newNet<-nnet(targetColumn~ . ,data=yourDataset, subset=yourDataSubset [..and more values]..)
您獲得一個訓練有素的神經網絡。 這里同樣重要的是隱藏層的大小,這是一件很難做到的事情。 根據經驗,它應該大約是輸入量 + 輸出量的 2/3(在您的情況下為 3)。
然后:
myPrediction <- predict(newNet, newdata=yourDataset(with the other subset))
您獲得預測值。 關於如何評估它們,我使用了 ROCR 包,但目前只支持二進制分類,我想谷歌搜索會顯示一些幫助。
如果您堅持要消除一些協變量,則使用 cor() 函數可能會幫助您識別特征較少的協變量。
編輯分步指南:
假設我們有這個數據框:
str(df)
'data.frame': 5 obs. of 3 variables:
$ a: num 1 2 3 4 5
$ b: num 1 1.5 2 2.5 3
$ c: Factor w/ 3 levels "blue","red","yellow": 2 2 1 2 3
c列有 3 個級別,即它可以取 3 種類型的值。 當列具有字符串而不是數值時,這是默認情況下由數據框完成的操作。
現在,使用列a和b我們想預測c 將是哪個值。 使用神經網絡。 nnet 包對於這個例子來說已經足夠簡單了。 如果您沒有安裝它,請使用:
install.packages("nnet")
然后,加載它:
require(nnet)
在此之后,讓我們用數據樣本訓練神經網絡,為此,函數
部分<-樣本(1:nrow(df),0.7*nrow(df))
將部分存儲數據幀中 70% 的行。 現在,讓我們訓練那個網絡! 我建議您使用?nnet
檢查 nnet 包的文檔以獲得更深入的知識。 僅使用基礎知識:
myNet<-nnet( c~ a+b,data=df,subset=portion,size=1)
c~ a+b
是預測公式。 您想使用 a 和 b 列來預測c列data=
表示數據來源,在這種情況下,數據幀 df subset=
self explanatory size=
隱藏層的大小,正如我所說,使用大約 2/3總列數(a+b) + 總產出(1)
我們現在已經訓練好了網絡,讓我們使用它。
使用predict
您將使用經過訓練的網絡來獲取新值。
newPredictedValues<-predict(myNet,newdata=df[-portion,])
之后, newPredictedValues 將有預測。
既然你有數值數據和分類數據,那么你可以試試 SVM。
我在我的數值數據上使用 SVM 和 KNN,我也嘗試應用 DNN。 DNN 在 R 中用於訓練特別是大數據的速度非常慢。 KNN 不需要訓練,但用於數值數據。 以下是我正在使用的。 也許你可以看看它。
#Train the model
y_train<-data[,1] #first col is response variable
x_train<-subset(data,select=-1)
train_df<-data.frame(x=x_train,y=y_train)
svm_model<-svm(y~.,data=train_df,type="C")
#Test
y_test<-testdata[,1]
x_test<-subset(testdata,select=-1)
pred<-predict(svm_model,newdata = x_test)
svm_t<-table(pred,y_test)
sum(diag(svm_t))/sum(svm_t) #accuracy
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.