1、功能不同
Scikit-learn(sklearn)的定位是通用机器学习库,而TensorFlow(tf)的定位主要是深度学习库。一个显而易见的不同:tf并未提供sklearn那种强大的特征工程,如维度压缩、特征选择等。究其根本,我认为是因为机器学习模型的两种不同的处理数据的方式:传统机器学习:利用特征工程(feature engineering),人为对数据进行提炼清洗
深度学习:利用表示学习(representation learning),机器学习模型自身对数据进行提炼
sklearn更倾向于使用者可以自行对数据进行处理,比如选择特征、压缩维度、转换格式,是传统机器学习库。而以tf为代表的深度学习库会自动从数据中抽取有效特征,而不需要人为的来做这件事情,因此并未提供类似的功能。
2、使用自由度不同
sklearn 中的模块都是高度抽象化的,所有的分类器基本都可以在3-5行内完成,所有的转换器(如scaler和transformer)也都有固定的格式。这种抽 象化限制了使用者的自由度,但增加了模型的效率,降低了批量化、标准化的的难度(通过使用pipeline)。
clf = svm.SVC() # 初始化一个分类器
clf.fit(X_train, y_train) # 训练分类器
y_predict = clf.predict(X_test) # 使用训练好的分类器进行预测
而tf不同,虽然是深度学习库,但它有很高的自由度。你依然可以用它做传统机器学习所做的事情,代价是你需要自己实现算法。因此用tf类比sklearn不适合,封装在tf等工具库上的keras[2]才更像深度学习界的sklearn。
从自由度角