skflow的简介
skflow,TF中的Scikit-learn,为了避免Tensorflow中自己一点点搭建学习系统,对TF进一步封装的工具包,包含很多经典的机器学习模型.如线性回归器、深度全连接的神经网络。tensorflow的抽象上层API接口,提供了完全类似于sklearn的API接口。使用非常简单,只要有sklearn的使用经验,构建一个模型就是简单几个步骤,模型参数配置,fit,predict等等。其实,skflow以前是单独一个项目,地址为:https://github.com/tensorflow/skflow
目前官方已经没有维护这个项目了,因为已经完全把它整合到tensorflow中去了,地址为:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/learn/python/learn
-为了平稳地从Scikit单线机器学习世界过渡到构建不同形状的ML模型的更开放的世界。您可以从使用fit/predict开始,当您感觉舒服时,再导入TensorFlow api。
-提供一套易于与现有代码集成的参考模型。
WARNING: We are not maintaining PyPi package anymore. Please install TensorFlow and install Scikit Flow from there. This is a simplified interface for TensorFlow, to get people started on predictive analytics and data mining. Library covers variety of needs from linear models to Deep Learning applications like text and image understanding.
警告:我们不再维护pypi包。请安装TensorFlow并从中安装SciKit Flow。这是一个简化的TensorFlow界面,可以帮助人们开始预测分析和数据挖掘。Library涵盖了从线性模型到文本和图像理解等深入学习应用程序的各种需求。
PS:博主建议不要再使用该库,很久已经没有更新了!python3+不同TensorFlow版本使用的时候,会出现很多bug。与skflow相匹配的版本是TensorFlow0.8.0 ,所以,对于TensorFlow1.0+的用户,又想用 skflow 的话,建议安装 TensorFlow0.8.0。如果非要在TensorFlow1.0+上使用,参考文章TensorFlow之API:TensorFlow的高级机器学习API——tf.contrib.learn的简介、使用方法、案例应用之详细攻略
比如UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb4 in position 1193: invalid start byte,所以还是使用最新的TensorFlow and install Scikit Flow。
skflow pypihttps://pypi.org/project/skflow/0.1.0/
skflow的安装
pip install skflow==0.1.0
skflow的使用方法
Scikit Flow封装了很多的TensorFlow的最新的API,并且将它们封装成了很类似于Scikit Learn API的样式。TensorFlow的核心即是基于构建与执行某个图,这是一个非常棒,但也是非常难以直接上手的概念。如果我们看Scikit Flow的底层封装,我们可以看到整个模型被分为了以下几个部分:
TensorFlowTrainer — 用于寻找所有优化器的类(使用梯度进行了部分的图构建,进行了一些梯度裁剪并且添加一些优化器)
logistic_regression —用于构造Logistic回归图的函数
linear_regression — 用于构造线性回归图的函数
DataFeeder — 用于将训练数据填充到模型中 (由于TensorFlow使用了数据集合中的随机的一些部分作为随机梯度下降的数据,因此需要这样的Mini数据批处理)。
TensorFlowLinearClassifier — 用LogisticRegression 模型实现了 Scikit Learn提供的某个接口。它提供了一个模型和一个训练器,并且根据给定的数据集合利用fit()方法进行数据训练,并且通过predict()方法进行预测。
TensorFlowLinearRegressor — 类似于 TensorFlowClassifier, 但是使用LinearRegression 作为模型。
skflow的代码实现
1、从scikit-learn中加载鸢尾花数据,构建一个线性分类器,然后使用fit进行拟合,最后使用predict进行预测,并进行性能评估。
import tensorflow.contrib.learn.python.learn as learn
from sklearn import datasets, metrics
iris = datasets.load_iris()
classifier = learn.LinearClassifier(n_classes=3)
classifier.fit(iris.data, iris.target, steps=200, batch_size=32)
score = metrics.accuracy_score(iris.target, classifier.predict(iris.data))
print("Accuracy: %f" % score)
2、利用DNN算法对泰坦尼克号号数据集进行乘客获救与否预测
import random
import pandas
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.utils import check_array
from sklearn.cross_validation import train_test_split
import tensorflow as tf
import skflow
train = pandas.read_csv('data/titanic_train.csv')
y, X = train['Survived'], train[['Age', 'SibSp', 'Fare']].fillna(0)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
lr = LogisticRegression()
lr.fit(X_train, y_train)
print accuracy_score(lr.predict(X_test), y_test)
# Linear classifier.
random.seed(42)
tflr = skflow.TensorFlowLinearClassifier(n_classes=2, batch_size=128,
steps=500, learning_rate=0.05)
tflr.fit(X_train, y_train)
print accuracy_score(tflr.predict(X_test), y_test)
# 3 layer neural network with rectified linear activation.
random.seed(42)
classifier = skflow.TensorFlowDNNClassifier(hidden_units=[10, 20, 10],
n_classes=2, batch_size=128, steps=500, learning_rate=0.05)
classifier.fit(X_train, y_train)
print accuracy_score(classifier.predict(X_test), y_test)
# 3 layer neural network with hyperbolic tangent activation.
def dnn_tanh(X, y):
layers = skflow.ops.dnn(X, [10, 20, 10], tf.tanh)
return skflow.models.logistic_regression(layers, y)
random.seed(42)
classifier = skflow.TensorFlowEstimator(model_fn=dnn_tanh,
n_classes=2, batch_size=128, steps=500, learning_rate=0.05)
classifier.fit(X_train, y_train)
print accuracy_score(classifier.predict(X_test), y_test)