如何让scikit-learn Nearest Neighbors算法运行得更快?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让scikit-learn Nearest Neighbors算法运行得更快?相关的知识,希望对你有一定的参考价值。
我正在尝试运行基于文本的推荐系统,从大约56K零件的文件中找到零件的类别:例如:铜管 - >电线,电视 - >电子产品等
但是,在我的8GB RAM系统中运行时,获取推荐系统输出大约需要4个小时。我尝试在一个大约32 GB的ram上运行相同的脚本,但是计算时间没有任何改进,这仍然需要4个小时。推荐系统的训练集约为11k。
如何让我的推荐系统运行得更快?似乎脚本没有有效地利用内存。任何帮助将不胜感激。
注意:显示的示例仅用于说明,原始数据集要复杂得多。
from sklearn.neighbors import NearestNeighbors
#Code for recommendation system
def recommendhts(x,model,train):
distance,index=model.kneighbors(x.toarray(),n_neighbors=1)
mi=distance.argmax()
idx=index[mi][0]
return(train.iloc[idx]['sHTS'],distance[0][0])
#Training the model of training set
train=pd.read_csv('train0207190144.csv')
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(train['keywords'])
x=X.toarray()
df=pd.DataFrame(x,columns=vectorizer.get_feature_names())
model=NearestNeighbors(metric='correlation',n_neighbors=1)
model.fit(df)
vect=vectorizer.fit(train['keywords'])
#Fitting the Count vectoriser on keywords(product description to be queried)
x_new=vect.transform(product['keywords'])
for i in range(len(product)):
key=x_new[i]
output,probability=recommendhts(key,model,train)
编辑:我正在附加评论中建议的Code profiling results分析结果的快照。我运行了1000行的样本,所用的时间约为1085秒。
首先,您肯定需要分析您的代码。我建议在IPython / Jupyter中使用%prun
magic命令来获取profiling your script。
其他一些事情要尝试
- 设置'n_jobs'参数以在进行预测时允许并行。
# setting n_jobs=2 will use 2 cores; setting n_jobs=-1 will use all cores model=NearestNeighbors(metric='correlation',n_neighbors=1, n_jobs=2)
- 我不清楚重新装配
vectorizer
是必要的。vect=vectorizer.fit(train['keywords']) # can be removed?
最后,您应该能够对预测进行矢量化并替换for
循环,但这需要重构您的推荐系统,如果没有更多信息,我无法帮助您。
以上是关于如何让scikit-learn Nearest Neighbors算法运行得更快?的主要内容,如果未能解决你的问题,请参考以下文章
让 Scikit-Learn RandomForestClassifier 输出前 N 个结果
Least Squares & Nearest Neighbors
python_机器学习_最临近规则分类(K-Nearest Neighbor)KNN算法
如何让 SVM 很好地处理 scikit-learn 中的缺失数据?