python中线性回归中的字符串预测

时间:2017-10-05 14:51:53

标签: python machine-learning linear-regression

我有一个类似于三列Type / Name / Price的数据集,并希望根据类型和名称预测价格。 这里Type / Name是分类字符串值。而Price是数字目标变量。

我的数据集如下:

{{1}}

我必须为此数据集创建一个模型,并希望预测类型/名称。 Type-A和Name ec2的预测价格是多少? 您能否提供示例代码。

此外,数据集不会有固定数量的列。只有目标变量固定为Price。独立变量可能具有Type / Name / Date..etc字段。

2 个答案:

答案 0 :(得分:1)

我将字符串值转换为数字以适合线性模型

from sklearn.linear_model import LinearRegression
from sklearn.feature_extraction import DictVectorizer
import StringIO
data ='''Type,Name,Price
A,ec1,1.5
B,ec2,2
A,ec2,3
C,ec1,1
B,ec3,1'''
df = pd.read_csv(StringIO.StringIO(data))
mapping = {}
cols = df.drop('Price', axis=1).columns
for col in cols:
  mapping[col] = {name: i for i, name in enumerate(df[col].unique())}
def mapping_func(row):
  return pd.Series([mapping[col][row[col]] for col in cols])

X = df.apply(mapping_func, axis=1)
y = df['Price']
model = LinearRegression()

model.fit(X, y)
print model.predict([ mapping['Type']['B'], mapping['Name']['ec2']] )

输出:

[ 1.57692308]

答案 1 :(得分:0)

在输入数据上使用字典矢量化器。它会将您的分类特征转换为矢量的二元特征。

在此处详细了解:http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.DictVectorizer.html#sklearn.feature_extraction.DictVectorizer

如果我以您的数据集为例,它将看起来像这样:

data = [{"type": A, "name": ec1},
        {"type": B, "name": ec2},
        {"type": A, "name": ec2},
        {"type": C, "name": ec1},
        {"type": B, "name": ec3}]

from sklearn.feature_extraction import DictVectorizer

vectorizer = DictVectorizer()
vector_data = vectorizer.fit_transform(data)

现在您的vector_data已准备好用于机器学习模式。