Тренируя эту модель в цикле for
200 Кб, я мог получить точность 0,97 (это означает 97%, я думаю?), Я сохранил ее в файле .pickle
.Проблема в том, что это не похоже на обучение, потому что я получаю те же результаты даже без обучения модели и с точностью до 70-90%.Что ж, если бы я получил более высокую точность, я бы подумал, что это обучение, но, как я уже сказал, результат не меняется.
В любом случае, даже с точностью до 70-97% он дает только правильноерезультат ~ 20-45% всех данных.Как вы видите, я новичок в этом деле, и я следую учебному пособию по адресу: https://www.youtube.com/watch?v=3AQ_74xrch8
Вот код:
import pandas as pd
import numpy as np
import pickle
import sklearn
from sklearn import linear_model
data = pd.read_csv('student-mat.csv', sep=';')
data = data[['G1', 'G2', 'G3', 'studytime', 'failures', 'absences']]
predict = 'G3'
X = np.array(data.drop([predict], 1))
y = np.array(data[predict])
x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(X, y, test_size=0.1)
# comment after train the model #
best_accuracy = 0
array_best_accurary = []
for _ in range(200000):
x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(X, y, test_size=0.1)
linear = linear_model.LinearRegression()
linear.fit(x_train, y_train)
accuracy = linear.score(x_test, y_test)
if accuracy > best_accuracy:
best_accuracy = accuracy
array_best_accurary.append(best_accuracy)
with open('student_model.pickle', 'wb') as f:
pickle.dump(linear, f)
print(max(array_best_accurary), '\n')
# #
# uncomment after train the model
# picke_in = open('student_model.pickle', 'rb')
# linear = pickle.load(picke_in)
print('Coeficient:\n', linear.coef_)
print('Intercept:\n', linear.intercept_, '\n')
predictions = linear.predict(x_test)
total = len(predictions)
correct_predictions = []
for x in range(total):
print('Predict', predictions[x], '- Correct', y_test[x])
if int(predictions[x]) == y_test[x]:
correct_predictions.append(1)
print('\n')
print('Total:', total)
print('Total correct predicts:', len(correct_predictions))
И вывод:
0.977506233512022
Coeficient:
[ 0.14553549 0.98120042 -0.18857019 -0.31539844 0.03324807]
Intercept:
-1.3929098924365348
Predict 9.339230104273398 - Correct 9
Predict -1.7999979510132014 - Correct 0
Predict 18.220125096856393 - Correct 18
Predict 3.5669380684894634 - Correct 0
Predict 8.394034346453692 - Correct 10
Predict 11.17472103817094 - Correct 12
Predict 6.877027043616517 - Correct 7
Predict 13.10046638328761 - Correct 14
Predict 8.460530481589299 - Correct 9
Predict 5.619296478409708 - Correct 9
Predict 5.056861318329287 - Correct 6
Predict -0.4602308511632893 - Correct 0
Predict 5.4907111970972124 - Correct 7
Predict 7.098301508597935 - Correct 0
Predict 9.060702343692888 - Correct 11
Predict 14.906413508421672 - Correct 16
Predict 5.337146104521532 - Correct 7
Predict 6.451206767114973 - Correct 6
Predict 12.005846951225159 - Correct 14
Predict 9.181910373164804 - Correct 0
Predict 7.078728252841696 - Correct 8
Predict 12.944012673326714 - Correct 13
Predict 9.296195408827478 - Correct 10
Predict 9.726422674287734 - Correct 10
Predict 5.872952989811228 - Correct 6
Predict 11.714775970606564 - Correct 12
Predict 10.699461464343582 - Correct 11
Predict 8.079501926145412 - Correct 8
Predict 17.050354493553698 - Correct 17
Predict 11.950269035741151 - Correct 12
Predict 11.907234340295231 - Correct 12
Predict 8.394034346453692 - Correct 8
Predict 9.563804949756388 - Correct 10
Predict 15.08795365845874 - Correct 15
Predict 15.197484489040267 - Correct 14
Predict 9.339230104273398 - Correct 10
Predict 6.72710996076076 - Correct 8
Predict 15.778083095387622 - Correct 16
Predict 8.238497037369088 - Correct 9
Predict 11.357208854852361 - Correct 12
Total: 40
Total correct predicts: 8
Я знаю, что это число с плавающей точкой, но даже если я округлю его вверх или вниз, я все равно не получу ожидаемого результата.Я знаю, что мой код слишком прост, но даже если я рассмотрю прогноз == (требуемый прогноз - 1), в приведенном выше выводе он даст мне 27 правильных прогнозов, что составляет ~ 60% от общего числа.Разве это не слишком низко?Я ожидал бы что-то вроде 70-80%.
Мое главное сомнение в том, почему я получаю ~ 20-45% правильных результатов, даже если точность составляет 70-97%.Может быть, я неправильно понял, как это работает, кто-то может уточнить?
Набор данных, который я использую: https://archive.ics.uci.edu/ml/datasets/Student+Performance