在具有数字和分类变量的数据集中使用R进行分类

在具有数字和分类变量的数据集中使用R进行分类,r,machine-learning,classification,feature-selection,R,Machine Learning,Classification,Feature Selection,我正在研究一个非常大的数据集.csv 数据集由数字列和分类列组成 其中一列是我的目标列,这意味着我想使用其他列来确定3个可能已知值中的哪个值可能位于目标列中。最后检查我的分类与真实数据 我的问题: 我用的是R 我试图找到一种方法来选择能够提供最佳分类的特征子集。 检查所有子集是不可能的 有没有人知道一种算法或者能想出一种在R上实现的方法?这似乎是一个分类问题。在不知道目标的协变量数量的情况下,无法确定,但神经网络不能解决问题吗 您可以使用nnet软件包,该软件包使用前馈神经网络,可以处理多个类。

我正在研究一个非常大的数据集.csv

数据集由数字列和分类列组成

其中一列是我的目标列,这意味着我想使用其他列来确定3个可能已知值中的哪个值可能位于目标列中。最后检查我的分类与真实数据

我的问题:

我用的是R

我试图找到一种方法来选择能够提供最佳分类的特征子集。 检查所有子集是不可能的


有没有人知道一种算法或者能想出一种在R上实现的方法?

这似乎是一个分类问题。在不知道目标的协变量数量的情况下,无法确定,但神经网络不能解决问题吗

您可以使用nnet软件包,该软件包使用前馈神经网络,可以处理多个类。拥有分类列不是问题,因为您可以只使用因子

没有数据示例,我只能解释一下,但主要是使用以下函数:

newNet<-nnet(targetColumn~ . ,data=yourDataset, subset=yourDataSubset [..and more values]..)
列c有3个级别,即它可以接受3种类型的值。默认情况下,当列具有字符串而不是数值时,dataframe会执行此操作

现在,使用a列和b列,我们想要预测c将是哪个值。使用神经网络。对于本例来说,nnet包非常简单。如果尚未安装,请使用:

install.packages("nnet")
然后,要加载它:

require(nnet)
在此之后,让我们用数据样本训练神经网络,为此,函数


部分既然你有数字和分类数据,那么你可以试试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

请举例说明您的数据框,例如,使用headdf或dputdf[1:10,]。如果没有,对返回随机值的算法的建议将与任何其他算法一样好:如果你有很多变量,你想要一个简约的模型,然后使用elasticnet lasso,ridge和R包glmnet.headdf和dput可以提供比这里更多的输出。基本上,dats设置为115910行87列,部分为数字,部分为分类。谢谢你的回答,但我想我应该说我对R非常陌生-基本上是从头开始学习的。甚至像将数据集上的列转换为因子这样的操作也具有挑战性。这是我的大部分答案,我无法回答。我需要的不仅仅是解决所描述问题的解决方案,我还需要一个相对容易实现的解决方案。很抱歉之前没有提到,有没有更友好的方法呢?这其实是一个很简单的方法,即使有这么多复杂的词,我对R也很陌生,但我一直在修补。我将尝试编辑评论以获得更详细的指南。现在编辑,如果仍然无法理解,请告诉我,解释自己不是我最好的资产之一…好的,我尝试使用它,但确实提出了一些问题:1。技术问题:运行-sample导致错误-sample中的错误:一元运算符的参数无效。我省略了-sample,使用了新的predictedvalues,恐怕我解释错了。这不会选择特征子集进行分类。这实际上是一种分类。我将检查为什么您得到的是二进制分类而不是多类分类。0-1之间的值应为0-2,越接近类值[0,1,2],越有可能是类值的一部分。关于样本问题,我的错,它应该是-部分而不是-样本,在答案中编辑。
require(nnet)
myNet<-nnet( c~ a+b,data=df,subset=portion,size=1)
newPredictedValues<-predict(myNet,newdata=df[-portion,])
#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