Как увидеть, насколько далеко от моего прогноза машинного обучения? - PullRequest
0 голосов
/ 05 июня 2018

Итак, у меня есть алгоритм машинного обучения, точность которого составляет 20%.

Это не так уж и много, но я хотел бы знать, насколько близок мой алгоритм в среднем.

Так что, если он предсказал значение 69, а реальное значение в данных тестирования было 68, и у него был этот «запас» погрешности во всем, тогда я был бы в порядке с его использованием для цели, которую яя использую его для заполнения недостающих данных в наборе данных.

Есть ли какой-нибудь простой способ сделать это?

Фрагмент моего кода:

def predict_score_industry(df):

    coi = ['score_teaching',
           'score_research',
           'score_citation',
           'score_int_outlook',
           ]

    not_nans = df['score_industry'].notnull()
    df_notnans = df[not_nans]

    x = np.array(df_notnans[coi])
    y = np.array(df_notnans['score_industry'])

    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)

    clf = LinearRegression()
    clf.fit(x_train, y_train)

    print("score_industry: ", clf.score(x_test, y_test))

    df_nans = df.loc[~not_nans].copy()
    df_nans['score_industry'] = clf.predict(df_nans[coi])
    df.score_industry.fillna(df_nans.score_industry, inplace=True)

    return df

Он в основном принимает все незаполненные значения и прогнозирует их, фрейм данных, который он читает, выглядит следующим образом:

> print(df.info())
Data columns (total 15 columns):
university_name       2884 non-null object
country               2884 non-null object
ranking               2884 non-null int64
no_student            2884 non-null int64
no_student_p_staff    2884 non-null float64
pct_intl_student      2884 non-null float64
year                  2884 non-null int64
score_overall         2884 non-null float64
score_teaching        2884 non-null float64
score_research        2884 non-null float64
score_citation        2884 non-null float64
score_industry        2884 non-null float64
score_int_outlook     2884 non-null float64
male                  2884 non-null float64
female                2884 non-null float64 

1 Ответ

0 голосов
/ 06 июня 2018

Частичный ответ, который, надеюсь, поможет вам разобраться в некоторых вопросах ...

Итак, у меня, по сути, есть алгоритм машинного обучения с точностью до 20%.

Поскольку вы находитесь в режиме регрессии, ваша оценка по определению не может быть точностью, которая имеет смысл только в классификации задач.

Я просто напечатал оценкумассивы x_test и y_test

Да, вы действительно использовали метод score модели LinearRegression в scikit-learn, который возвращает коэффициент определения (R^ 2);из документов :

score ( X, y, sample_weight = Нет )

Возвращаеткоэффициент детерминации R ^ 2 прогноза.

Коэффициент R ^ 2 определяется как (1 - u / v), где u - остаточная сумма квадратов ((y_true - y_pred) ** 2) .sum () и v - общая сумма квадратов ((y_true - y_true.mean ()) ** 2) .sum ().Наилучшая возможная оценка - 1,0, и она может быть отрицательной (поскольку модель может быть произвольно хуже).Постоянная модель, которая всегда прогнозирует ожидаемое значение y, независимо от входных характеристик, получит оценку R ^ 2 0,0.

Возможно, R ^ 2 редко используется в настройках машинного обучения,где требование - это способность к предсказанию (в основном это используется статистиками, где требование - это, как правило, объяснительная сила модели).

Какой показатель полезно знать в условиях регрессии?

Среднеквадратичная ошибка (MSE) и ее варианты являются наиболее часто используемыми показателями в задачах регрессии.Проверьте баллы, доступные для регрессии, в модуле оценки модели scikit-learn .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...