一直想用 tensonflow,就用一个简单的神经网络(DNN)实验了一下流失预测
方法一:用 contrib.learn 中 DNNClassifier函数
df1 = pd.read_table('E:\\kaggle\\tensonflow\\chunrn_test3', sep=',', encoding="UTF-8")
# print(df1[:5])
print(df1[s_v1][:5])
df1[s_v1] = df1[s_v1].astype(float)
df1['target'] = df1['target'].astype(int)
# scaler = StandardScaler().fit(x_train)
# x_train = scaler.transform(x_train)
df1_train = df1
df1_test = df1
def train_input_fn():
return input_fn(df1_train)
def test_input_fn():
return input_fn(df1_test)
G = globals()
deep_columns = []
for k in s_v1:
temp = tf.contrib.layers.real_valued_column(k)
G[k] = temp
deep_columns.append(G[k])
# deep_columns = tf.contrib.learn.infer_real_valued_columns_from_input(df1[s_v1]) #适合分类变量
print(deep_columns)
print ('1111111')
model_dir = tempfile.mktemp()
m = tf.contrib.learn.DNNClassifier(model_dir=model_dir,dropout = 0.3,
n_classes=2,
feature_columns=deep_columns,
hidden_units=[200, 100])
optimizer=tf.train.ProximalAdagradOptimizer(learning_rate=0.1,l1_regularization_strength=0.001)
m.fit(input_fn=train_input_fn, steps=10000)
print ('2222222')
m.export_savemodel(export_dir_base ='E:\\kaggle\\tensonflow\\')
results = m.evaluate(input_fn=test_input_fn, steps=1)
print("model directory = %s" % model_dir)
方法二: 自定义函数
def add_layer(inputs, in_size, out_size, activation_function=None):
# add one more layer and return the output of this layer
Weights = tf.Variable(tf.random_normal([in_size, out_size]))
biases = tf.Variable(tf.random_normal([out_size]))
Wx_plus_b = tf.matmul(inputs, Weights) + biases
if activation_function is None:
outputs = Wx_plus_b
else:
outputs = activation_function(Wx_plus_b)
# tf.histogram_summary(layer_name + '/outputs', outputs)
return outputs
xs = tf.placeholder(tf.float32, [None, 96])
ys = tf.placeholder(tf.float32, [None, 2])
keep_prob = tf.placeholder(tf.float32)
# 定义神经层:隐藏层和预测层
# add hidden layer 输入值是 xs,在隐藏层有 10 个神经元
l1 = add_layer(xs, 96, 200, activation_function=tf.nn.relu)
l2 = add_layer(l1, 200, 100, activation_function=tf.nn.relu)
l2 = tf.nn.dropout(l2, 0.7)
# add output layer 输入值是隐藏层 l1,在预测层输出 1 个结果
y_p = add_layer(l2, 100, 2, activation_function=None)
# 定义 loss 表达式
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=y_p, labels=ys))
# 选择 optimizer 使 loss 达到最小
train_step = tf.train.GradientDescentOptimizer(0.005).minimize(loss)
# important step 对所有变量进行初始化
init = tf.initialize_all_variables()
sess = tf.Session()
# 上面定义的都没有运算,直到 sess.run 才会开始运算
sess.run(init)