Ошибка типа: объект «Фрейм данных» не может быть вызван (попытка линейной регрессии с помощью sklearn)

#python #dataframe

Вопрос:

Я довольно новичок в python, поэтому я адаптировал код, который нашел в онлайн-ресурсах, чтобы попытаться создать эту регрессию. Код, который я извлекаю, работает идеально, и я почти ничего не изменил, кроме источников данных, поэтому я не уверен, что делаю неправильно. Любая помощь была бы невероятной! Вот код, который я использую:

     import matplotlib.pyplot as plt
    
    import numpy as np
    
    from sklearn import datasets, linear_model
    
    from sklearn.metrics import mean_squared_error, r2_score
    
    
    
    
    dfgmatgpa = df[["GradGPA", "GMATscore"]]
    
    dfgmatgpa = dfgmatgpa.dropna()
    
    dfgmatgpa.head()
 
 GradGPA GMATscore

17  2.80000 340.0

18  2.80000 340.0

32  4.15000 660.0

36  3.88143 570.0

41  3.28571 540.0
 
     # Load the diabetes dataset
    gmatgpa_X, gmatgpa_y = dfgmatgpa(return_X_y=True)
    
    # Use only one feature
    gmatgpa_X = gmatgpa_X[:, np.newaxis, 2]
    
    # Split the data into training/testing sets
    gmatgpa_X_train = gmatgpa_X[:-20]
    
    gmatgpa_X_test = gmatgpa_X[-20:]
    
    # Split the targets into training/testing sets
    gmatgpa_y_train = gmatgpa_y[:-20]
    
    gmatgpa_y_test = gmatgpa_y[-20:]
    
    # Create linear regression object
    regr = linear_model.LinearRegression()
    
    # Train the model using the training sets
    regr.fit(gmatgpa_X_train, gmatgpa_y_train)
    
    # Make predictions using the testing set
    gmatgpa_y_pred = regr.predict(gmatgpa_X_test)
    
    # The coefficients
    print('Coefficients: n', regr.coef_)
    # The mean squared error
    print('Mean squared error: %.2f'
          % mean_squared_error(gmatgpa_y_test, gmatgpa_y_pred))
    # The coefficient of determination: 1 is perfect prediction
    print('Coefficient of determination: %.2f'
          % r2_score(gmatgpa_y_test, gmatgpa_y_pred))
    
    # Plot outputs
    plt.scatter(gmatgpa_X_test, gmatgpa_y_test,  color='black')
    
    plt.plot(gmatgpa_X_test, gmatgpa_y_pred, color='blue', linewidth=3)
    
    plt.xticks(())
    
    plt.yticks(())
    
    plt.show()
 

ошибка:

 TypeError                                 Traceback (most recent call last)
<ipython-input-321-b5f145507243> in <module>
----> 1 gmatgpa_X, gmatgpa_y = dfgmatgpa(return_X_y=True)
      2 
      3 # Use only one feature
      4 gmatgpa_X = gmatgpa_X[:, np.newaxis, 2]
      5 

TypeError: 'DataFrame' object is not callable
 

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

1. dfgmatgpa это фрейм данных. dfgmatgpa(return_X_y=True) подразумевает, что это функция (она же вызываемая). Вы, наверное, хотите dfgmatgpa[return_X_y=True]

2. Вы намеревались вызвать какую-то функцию загрузки?

3. Большое вам спасибо, в этом есть смысл. Код, на основе которого я основываю свою работу, загружал набор данных из sklearn для создания примера. Я пытаюсь понять, как использовать мой собственный набор данных dfgmatgpa и присвоить значения X и y. Когда я просто пытаюсь определить их: gmatgpa_X = dfgmatgpa. GMATscore gmatgpa_y = dfgmatgpa.GradGPA Я получаю ошибку: Ошибка индекса: слишком много индексов для массива

Ответ №1:

Возможно, вы имеете в виду какой-то пример кода, подобный этому:

 from sklearn.datasets import load_iris
data = load_iris(return_X_y=True)
 

Здесь load_iris() это функция, и когда значение return_X_y равно True, она возвращает кортеж (данные, цель).

https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_iris.html

В вашем случае вы определяете dfgmatgpa как фрейм данных, а не функцию, вот почему вы получили ошибку. Но вы можете определить X и y отдельно, как вам нужно: gmatgpa_X gmatgpa_y как фрейм данных, как целевой список.

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

1. Большое вам спасибо, в этом есть смысл. Код, на основе которого я основываю свою работу, загружал набор данных из sklearn для создания примера. Я пытаюсь понять, как использовать мой собственный набор данных dfgmatgpa и присвоить значения X и y. Когда я просто пытаюсь определить их: gmatgpa_X = dfgmatgpa. GMATscore gmatgpa_y = dfgmatgpa.GradGPA Я получаю ошибку: Ошибка индекса: слишком много индексов для массива

2. Похоже, что ваш ввод ищет массив? Возможно, попробуйте преобразовать серию в массив «dfgmatgpa.GradGPA.values» (учитывая, что dfgmatgpa является фреймом данных, dfgmatgpa.GradGPA будет серией).

3. Вот и все!!! Спасибо, спасибо, спасибо!!!!