Есть ли способ использовать списки в качестве значений в DataFrame? - PullRequest
0 голосов
/ 12 декабря 2018

Я имею дело со знаменитым вызовом Kaggle "Цены на дома".Я хочу обучить свой набор данных с помощью sklearn.linear_model LinearRegression

После прочтения следующей статьи: https://developers.google.com/machine-learning/crash-course/representation/feature-engineering

я написал функцию, преобразующую все значения String в моем фрейме данных DataFrame в списки.Например, исходные значения объектов могут выглядеть следующим образом [Ex, Gd, Ta, Po], а после преобразования они будут выглядеть следующим образом: [1,0,0,0] [0,1,0,0] [0,0,1,0] [0,0,0,1].

Когда я пытаюсь обучить мои данные, я получаю следующую ошибку:

Traceback (последний вызов последний): Файл "C: /Users/Owner/PycharmProjects/HousePrices/main.py", строка 27, в файле linereg.fit (train_df, target) Файл "C: \ Users \ Владелец \ PycharmProjects \ HousePrices \ venv \ lib \ site-packages \ sklearn \ linear_model \ base.py ", строка 458, в подгонке y_numeric = True, multi_output = True) Файл" C: \ Users \ Владелец \ PycharmProjects \ HousePrices \ venv \ lib \ site-packages \ sklearn \ utils \ "validation.py ", строка 756, в check_X_y оценщик = оценщик) Файл" C: \ Users \ Owner \ PycharmProjects \ HousePrices \ venv \ lib \ site-packages \ sklearn \ utils \ validation.py ", строка 567, в массиве check_array= array.astype (np.float64) ValueError: установка элемента массива с последовательностью.

Это происходит только тогда, когда я преобразовываю некоторые столбцы, как я объяснил.

IsЕсть ли способ обучить модель линейной регрессии с векторами в качестве значений?

Это моя функция преобразования:

def feature_to_boolean_vector(df, feature_name, new_name):
    vectors_list = [] #each tuple will represent an option
    feature_options = df[feature_name].unique()
    feature_options_length = len(feature_options)

    # creating a list the size of feature_options_length, all 0's
    list_to_be_vector = [0 for i in range(feature_options_length)]

    for i in range(feature_options_length):
        list_to_be_vector[i] = 1 # inserting 1 representing option number i
        vectors_list.append(list_to_be_vector.copy())
        list_to_be_vector[i] = 0

    mapping = dict(zip(feature_options, vectors_list)) # dict from values to vectors
    df[new_name] = df[feature_name].map(mapping)
    df.drop([feature_name], axis=1, inplace=True)

И это моя попытка поезда (после предварительной обработки):

linereg = LinearRegression()
linereg.fit(train_df, target)

Заранее спасибо.

1 Ответ

0 голосов
/ 12 декабря 2018

LinearRegression не поддерживает список как функцию.Я видел, что вы используете одну горячую, и вы можете использовать каждое измерение в качестве столбца объектов.Напротив, вы можете использовать более простой метод pd.get_dummies в пандах.

print(df['feature'])
0    Ex
1    Gd
2    Ta
3    Po
Name: feature, dtype: object

df = pd.get_dummies(df['feature'])
print(df)
   Ex  Gd  Po  Ta
0   1   0   0   0
1   0   1   0   0
2   0   0   0   1
3   0   0   1   0
...