я пытаюсь сделать классификацию с использованием алгоритма cba в rpy2
но я нашел эту ошибку:
Traceback (последний последний вызов):
Файл "", строка 1, в
runfile ('D: /dm.py', wdir = 'D:')
Файл "C: \ ProgramData \ Anaconda2 \ lib \ site-packages \ spyder \ utils \ site \ sitecustomize.py", строка 880, в runfile
execfile (имя файла, пространство имен)
Файл "C: \ ProgramData \ Anaconda2 \ lib \ site-packages \ spyder \ utils \ site \ sitecustomize.py", строка 87, в execfile
exec (compile (scripttext, filename, 'exec'), glob, loc)
Файл "D: /dm.py", строка 104, в
c_p = class_pred.pred_class_on_test (c, dtest)
Файл "C: \ ProgramData \ Anaconda2 \ lib \ site-packages \ rpy2 \ robjects \ functions.py", строка 178, в вызов
возврат супер (SignatureTranslatedFunction, self). вызов (* args, ** kwargs)
Файл "C: \ ProgramData \ Anaconda2 \ lib \ site-packages \ rpy2 \ robjects \ functions.py", строка 106, в вызов
res = super (функция, self). call (* new_args, ** new_kwargs)
RRuntimeError: Ошибка в .local (x, ...):
Все метки элементов в x должны быть указаны в itemLabels или match.
код:
import os
os.environ['R_HOME'] = 'C:/Program Files/R/R-3.5.1'
os.environ['R_USER'] = 'C:/ProgramData/Anaconda2/Lib/site-packages/rpy2'
import rpy2.robjects as rr
#to import any r backage
from rpy2.robjects.packages import importr
# to call any r user defiend function from pythn string
from rpy2.robjects.packages import SignatureTranslatedAnonymousPackage as stap
# to convert to / from python/r dataframe
from rpy2.robjects import pandas2ri
pandas2ri.activate()
base = importr('base')
# read data set python
from sklearn.cross_validation import train_test_split
import pandas as pd
data= pd.read_csv("C://Users//El-Amir Tech//Desktop//tumor.csv")
print(data.info())
data=data.astype(str)
train,test=train_test_split(data, test_size=0.2, random_state=20)
# to convert python data frame to r data frame
dd=pandas2ri.py2ri(train)
dtest=pandas2ri.py2ri(test)
# data minin association rule function from r
rs=importr('arules')
clas=importr('arulesCBA')
rstring="""
# generate rules
ruless <- function (d){
da<- as.data.frame(d)
trans <- as(da, "transactions")
# to get rhs=outcome only
incom <- grep("^Class=",itemLabels(trans), value=TRUE)
rules <- apriori(trans, parameter = list(supp = 0.01, conf = 0.8,minlen=2, target = "rules"),appearance=list(rhs=incom))
return (rules)
}
# convert rules to data frame
rule2dataframe<-function(r){
n<-DATAFRAME(r,separate=TRUE)
return (n)
}
# apply cba classifier
classf <- function (rs){
c1<- CBA_ruleset(Class~ ., rs)
return (c1)
}
pred_class_on_test <- function(classifir,dtest) {
d<- as.data.frame(dtest)
results <- predict(classifir, d)
return(results)}
"""
# call r function using stap
rule= stap(rstring,"ruless")
m=rule.ruless(dd)
r2d=stap(rstring,"rule2dataframe")
r=r2d.rule2dataframe(m)
## convert rules r dataframe to pandas dataframe
rules=pandas2ri.ri2py_dataframe(r)
print (rules)
classs=stap(rstring,"classf")
c=classs.classf(m)
print c
class_pred=stap(rstring,"pred_class_on_test")
c_p=class_pred.pred_class_on_test(c, dtest)
print c_p
так как я могу исправить эту ошибку?
ссылка на набор данных: