Все знают, что содержание делает вопрос. Но хороший заголовок тоже помогает, и это первое, что мы видим. Пришло время превратить это первое впечатление в программу и выяснить, какие названия получают больше голосов.
Настоящим вам предлагается написать программу или функцию, которая принимает название вопроса PPCG в качестве входных данных и возвращает прогноз его оценки.
Например, вы можете получить Counting Grains of Rice
в качестве входных данных, и 59
в этом случае вы пытаетесь вернуть что-то близкое к результату . Нецелочисленные догадки хороши, но догадки на уровне или ниже -20
- нет.
Вот данные для тестирования и оценки:
http://data.stackexchange.com/codegolf/query/244871/names-and-upvotes
Оценка: Ваша программа будет выполняться по каждому вопросу в истории этого сайта (PPCG), не считая закрытых вопросов. Затем эта функция ln(score + 20)
будет применена к каждому результату и каждому предположению. Среднеквадратическая ошибка между двумя результирующими наборами значений является вашей оценкой. Ниже - лучше.
Например, программа, которая угадывала 0 каждый раз, набрала бы 0,577, а программа, которая угадала 11 каждый раз, получит 0,362.
Пожалуйста, рассчитайте свой счет и включите его в заголовок вашего ответа. Пожалуйста, также включите прогноз вашей программы о том, сколько голосов получит этот вопрос.
Ограничения:
Для предотвращения чрезмерного жесткого кодирования, не более 1000 символов.
Должен работать на всех данных, указанных выше, менее чем за минуту на разумной машине.
Стандартные лазейки закрыты.
Вот тестер, написанный на Python, для вашего использования и / или устранения неясностей:
import sys
import math
import csv
scores_dict = {}
with open(sys.argv[1], 'r') as csv_file:
score_reader = csv.reader(csv_file)
for score, title in score_reader:
if score == 'Score':
continue
scores_dict[title] = int(score)
def rate_guesses(guesser):
def transform(score):
return math.log(score + 20) if score > -20 else 0
off_by_total = 0
lines_count = 0
for title in scores_dict:
guessed_score = guesser(title)
real_score = scores_dict[title]
off_by_total += (transform(real_score) - transform(guessed_score)) ** 2
return (off_by_total/len(scores_dict)) ** .5
def constant11(title):
return 11
print(rate_guesses(constant11))
[closed]
и [on hold]
, где это применимо?