Ошибка при выполнении линейной регрессии с использованием statsmodel

#python #pandas #numpy #linear-regression #statsmodels

#питон #pandas #numpy #линейная регрессия #статсмодели

Вопрос:

     temp=values(times,l1dl,l1il,llcl,llcs,branchl,dtlbl,dtlbs,itlbl,cycles)
    objects.append(temp)
    
class values:
    def __init__(self,timestamp,l1dl,l1il,llcl,llcs,branchl,dTLBl,dTLBs,iTLBl,cycles):
        self.timestamp=timestamp
        self.l1dl=l1dl
        self.l1il=l1il
        self.llcl=llcl
        self.llcs=llcs
        self.branchl=branchl
        self.dTLBl=dTLBl
        self.dTLBs=dTLBs
        self.iTLBl=iTLBl
      #  self.instrn=instrn
        self.cycles=cycles

    def as_dict(self):
        return{'timestamp':self.timestamp,'l1dl':self.l1dl,'l1il':self.l1il,'llcl':self.llcl,'llcs':self.llcs,'branchl':self.branchl,'dTLBl':self.dTLBl,'dTLBs':self.dTLBs,'iTLBl':self.iTLBl,'cycles':self.cycles}
        

    
df=pd.DataFrame([x.as_dict() for x in objects])

#print(df)
print(df.describe())



X=df[['l1dl','l1il','llcl','llcs','branchl','dTLBl','dTLBs','iTLBl']]
Y=df[['cycles']]


#with statsmodel
X1,Y1=np.array(X),np.array(Y)
*X1 = sm.add_constant(X1)*

#print(X1)
model = sm.OLS(Y1, X1)
results=model.fit()
print(results.summary())

 

Я пытаюсь выполнить множественную линейную регрессию для системного счетчика производительности, используя statsmodel вместо sklearn, потому что в sklearn нет опции сводки отчета, я должен распечатать всю статистику по отдельности. Но с помощью result.summary() i можно собрать всю статистику вместе.
Я проанализировал данные из файла .txt в столбцы, и все данные представлены в str формате.

когда я выступаю X1,Y1=np.array(X),np.array(Y) X1 = sm.add_constant(X1) , я получаю TypeError: unsupported operand type(s) for -: 'str' and 'str' .Я думаю, что sm.add_constant(x) требует, чтобы x было постоянным, а не строковым. Не могли бы вы , пожалуйста , помочь мне ?

Комментарии:

1. вы можете просто передать фрейм данных для регрессии model = sm.OLS(Y, X)

2. X и y должны быть числовыми, а не строками. Если строки имеют числовые значения, вы можете преобразовать их с помощью pandas. Если строки являются категориальными переменными, то проще использовать интерфейс формулы, который преобразует строки в некоторую числовую кодировку или фиктивные переменные.