我有一个类似于三列Type / Name / Price的数据集,并希望根据类型和名称预测价格。 这里Type / Name是分类字符串值。而Price是数字目标变量。
我的数据集如下:
{{1}}
我必须为此数据集创建一个模型,并希望预测类型/名称。 Type-A和Name ec2的预测价格是多少? 您能否提供示例代码。
此外,数据集不会有固定数量的列。只有目标变量固定为Price。独立变量可能具有Type / Name / Date..etc字段。
答案 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)
在输入数据上使用字典矢量化器。它会将您的分类特征转换为矢量的二元特征。
如果我以您的数据集为例,它将看起来像这样:
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
已准备好用于机器学习模式。