Учитывая обсуждение в комментариях, кажется, что интерпретация должна состоять в том, что каждый список определяет двоичную переменную, значение которой зависит от того, появляются ли какие-либо слова из списка в рассматриваемом тексте. Итак, давайте сначала изменим тексты так, чтобы слова действительно появлялись:
dataset = [
{"text": "I don't like this large device", "rating": "2"},
{"text": "Really love this small device", "rating": "5"},
{"text": "Some other text", "rating": "3"}
]
Чтобы упростить нашу работу, мы затем загрузим эти данные во фрейм данных, изменим оценки на целые и создадим соответствующие переменные:
df = pd.DataFrame(dataset)
df['rating'] = df['rating'].astype(int)
df['text'] = df['text'].str.split().apply(set)
x1 = ['short', 'slim', 'small', 'shrink']
x2 = ['big', 'huge', 'large']
df['x1'] = df.text.apply(lambda x: x.intersection(x1)).astype(bool)
df['x2'] = df.text.apply(lambda x: x.intersection(x2)).astype(bool)
То есть на данный момент df
является следующим фреймом данных:
rating text x1 x2
0 2 {this, large, don't, like, device, I} False True
1 5 {this, small, love, Really, device} True False
2 3 {other, Some, text} False False
С помощью этого мы можем создать соответствующую модель и проверить, каковы будут коэффициенты:
model = LinearRegression()
model.fit(df[['x1', 'x2']], df.rating)
print(model.coef_) # array([ 2., -1.])
print(model.intercept_) # 3.0
Как также упоминалось в комментариях, эта вещь будет давать не более четырех оценок, по одному для каждой из комбинаций x1
и x2
, равных True
или False
. В этом случае просто так получается, что все возможные выходные данные являются целыми числами, но в общем случае они не должны быть и не должны ограничиваться интересующим интервалом. Учитывая порядковый характер рейтингов, это действительно случай некоторой порядковой регрессии (см., Например, mord ).