我已经建立了一个增量学习模型,但不确定它是对还是错我有2个训练数据第一个由20000行组成,第二个由10000行组成,它们都有两列描述和id……如果离线学习,我的模型运行良好,它正在为给定的描述分类正确的id。。 数据文件培训是第一个培训数据 datafile_train1是第二个训练数据 我正在使用SGD分类器和部分拟合方法进行增量
1)计数矢量器、tfidf和部分拟合
vectorizer = CountVectorizer()
tfidf_transformer = TfidfTransformer()
X_train = vectorizer.fit_transform(datafile_train.loc[:,'description'])
X_train_tfidf = tfidf_transformer.fit_transform(X_train)
clf = linear_model.SGDClassifier(penalty='l2',loss='hinge')
prd=clf.partial_fit(X_train_tfidf, datafile_train.loc[:,'taxonomy_id'],classes=np.unique(datafile_train.loc[:,'taxonomy_id']))
在这之后,我酸洗分类器,并再次取消拾取,以使用在下一部分适合增量学习
2)分级机酸洗、脱粘
^{pr2}$3)Countvectorizer、tfidf和partial_同样适用于新数据
vectorizer = CountVectorizer()
tfidf_transformer = TfidfTransformer()
X_train1 = vectorizer.fit_transform(datafile_train1.loc[:,'description'])
X_train_tfidf1 = tfidf_transformer.fit_transform(X_train1)
prd1=clfp.partial_fit(X_train_tfidf1, datafile_train1.loc[:,'taxonomy_id'])
# here clfp is previously trained data which is unpickled
我有这样的构建模型,但当我检查pickle文件(第一次训练的数据)的大小时,它是5 MB,当我使用这个模型训练新数据时,正如你在第二次部分拟合中看到的那样,我在训练新数据后使用了clfp(5 MB大小),当我为第二次部分拟合pickle训练文件时,它也只显示了5 MB的大小,它应该得到更新,因为我am在以前训练过的数据上训练新数据 这是实现增量/在线学习的正确方法吗?? 请帮助我是新的机器学习,所以它将是好的,如果你解释使用代码
这个错误被抛出
ValueError: Number of features 125897 does not match previous data 124454.
****编辑(使用Hashingvectorizer)
hashing = HashingVectorizer()
X_train_hashing=hashing.fit_transform(datafile_train.loc[:,'description'])
clf = linear_model.SGDClassifier(penalty='l2',loss='hinge')
prd=clf.partial_fit(X_train_hashing, datafile_train.loc[:,'taxonomy_id'],classes=np.unique(datafile_train.loc[:,'taxonomy_id']))
def store(prd):
import pickle
filename = "inc"
f = open(filename, 'wb')
pickle.dump(prd, f)
f.close()
store(prd)
def train_data():
import pickle
f = open('inc', 'rb')
classifier = pickle.load(f)
f.close()
return classifier
clfp=train_data()
现在我正在使用clfp列车模型进行下一次局部拟合
X_train_hashing1=hashing.transform(datafile_train1.loc[:,'description'])
prd1=clfp.partial_fit(X_train_hashing1, datafile_train1.loc[:,'taxonomy_id'])
def store(prd1):
import pickle
timestr = time.strftime("%Y%m%d-%H%M%S")
filename = "Train-" + timestr +".pickle"
f = open(filename, 'wb')
pickle.dump(prd1, f)
f.close()
store(prd1)
在这个编辑中,它没有给出任何错误,但是两个pickle文件的大小都是相同的25.2mb,但是第二个pickle的大小应该大于第一个pickle的大小,因为我在新数据上使用第一个经过训练的模型
我不认为节省的模型大小应该增加太多或根本没有。在
模型不存储发送到
partial_fit()
的全部新数据,只根据该数据更新其属性。这些属性一旦根据它们的类型(float32, float64
等)分配了一些存储空间,那么不管它们的值是多少,它们都将占用大量空间。在在SGD分类器中会改变的显著属性是:-在
因此,当您初始化模型时,它们要么未分配,要么全部初始化为0。一旦您将第一个数据传递给
partial_fit()
,这些值将根据试图最小化预测损失的数据进行更新。在当您传递新数据时,这些值将再次更新,但它们仍占用指定给其类型的相同存储空间(
float32, float64
等)。在所以这就是保存的模型没有改变尺寸的原因。在
相关问题 更多 >
编程相关推荐