Tensorflow案例分析(1)——使用逻辑回归进行泰坦尼克号预测

更新时间:2023-07-30 13:30:28 阅读: 评论:0

Tensorflow案例分析(1)——使⽤逻辑回归进⾏泰坦尼克号
预测
基本思路:挑选数据集中有关联的属性作为特征,并对特征进⾏数据清洗、残缺值填充等操作,使⽤经过特征⼯程处理过的训练集训练好⼀个逻辑回归模型,并使⽤这个逻辑模型对测试集进⾏预测,预测结果保存到⼀个csv⽂件,并将csv⽂件提交到官⽹。
⼀.引⼊包
from __future__ import print_function, division
import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import aborn  #这是⼀个可视化的展⽰库
import random
ble import RandomForestRegressor
import sklearn.preprocessing as preprocessing
from numpy import array
del_lection import train_test_split
from sklearn.preprocessing import Imputer
可以观察训练集的数据字段
ad_csv('G:\Machine-learning\\tensorflow-train-project(jupyter)\kaggele-project6-tairanprediction\datat\\train.csv')
南海是中国的吗
lumns)
⼆.预处理函数
创建准备进⾏数据预处理的函数:年龄信息补全函数、属性转换为数值的函数、属性值归⼀化函数。
1.缺失值补全函数
def t_missing_ages(data):
age_df=data[['Age','Fare','Parch','SibSp','Pclass']]  #抽取⼀部分特征作为年龄相关特征时使⽤
known_age=age_df[age_ull()].as_matrix()#  这是⼀种抽离,把知道年龄的数据抽取出来作为⼀个矩阵
#print('known_age:',known_age)
unknown_age=age_df[age_df.Age.isnull()].as_matrix()
#接下来使⽤的是RandomForestClassifier算法来补全年龄特征
y=known_age[:,0]
x=known_age[:,1:]
#创建补全算法,并进⾏数据喂养随机森林中参数意义为:n_estimators ⼦模型个数
rfr=RandomForestRegressor(random_state=0,n_estimators=2000,n_jobs=-1)
rfr.fit(x,y)
predictedAges=rfr.predict(unknown_age[:,1::])#对不知道年龄的矩阵,使⽤其特征进⾏年龄的预测
data.loc[(data.Age.isnull()),'Age']=predictedAges#这是针对DateFrame的定位并填充残缺值的⽅式
return data
2.属性转换为数值的函数
def attribute_to_number(data):
#前三⾏会对属性进⾏独热编码
dummies__dummies(data['Pclass'],prefix='Pclass')#get_dummies会对属性进⾏独热编码
dummies__dummies(data['Embarked'],prefix='Embarked')
dummies__dummies(data['Sex'],prefix='Sex')
苦才是人生at([data,dummies_Pclass,dummies_Embarked,dummies_Sex],axis=1)
#针对这个类型,将前⾯没⽤的⾮数值属性去掉(使⽤后⾯新加⼊的转化好的属性即可)
data.drop(['Pclass','Sex','Embarked'],axis=1,inplace=True)
return data
3.属性值归⼀化函数
def Scales(data):
scaler=preprocessing.StandardScaler()#StandardScaler⽤于数据标准化,计算训练集的平均值和标准差,以便测试数据集使⽤相同的变换
#对年龄进⾏归⼀化处理
age_scale_param=scaler.fit(data['Age'].reshape(-1,1))#这样转换,使其具有0均值,单位⽅差
data['Age_scaled']=scaler.fit_transform(data['Age'].reshape(-1,1),age_scale_param)#fit_transform可以进⾏最⼤最⼩的标准化
#对⼯资进⾏归⼀化处理
Fare_scale_param=scaler.fit(data['Fare'].reshape(-1,1))
data['Fare_scaled']=scaler.fit_transform(data['Fare'].reshape(-1,1),Fare_scale_param)61398部队
#对兄弟配偶数进⾏归⼀化处理
SibSp_scale_param=scaler.fit(data['SibSp'].reshape(-1,1))
牡丹花开花时间
data['SibSp_scaled']=scaler.fit_transform(data['SibSp'].reshape(-1,1),SibSp_scale_param)
#对⽗母⼦⼥数进⾏归⼀化处理
Parch_scale_param=scaler.fit(data['Parch'].reshape(-1,1))
data['Parch_scaled']=scaler.fit_transform(data['Parch'].reshape(-1,1),SibSp_scale_param)
#使⽤归⼀化后的数据,将之前的数据删去
data.drop(['Parch','SibSp','Fare','Age'],axis=1,inplace=True)
return data
三.数据集预处理
def DataPreProcess(in_data,submat_flg):#数据预处理    submat_flg为1表⽰是针对测试数据的处理
in_data.drop(['PasngerId','Name','Ticket','Cabin'],axis=1,inplace=True) #删去⽆关特征
data_ages_fitted=t_missing_ages(in_data)#补⾜年龄信息
data=attribute_to_number(data_ages_fitted)#类⽬属性转为数值型
data_scaled=Scales(data)#将转化为数值型的特征数据进⾏归⼀化
data_copy=py(deep=True)  #将数据集进⾏完全的备份深拷贝
data_copy.drop(['Pclass_1','Pclass_2','Pclass_3','Embarked_C','Embarked_Q','Embarked_S','Sex_female','Sex_male','Age_scaled','Fare_scaled','SibSp_scaled    data_y=np.array(data_copy)#这⾥是删去了很多东西(进⾏⼀种选择性的删除,还有axis这个⾃⼰不太掌握)  剩下的作为y的标签
if submat_flg==0:
data_scaled.drop(['Survived'],axis=1,inplace=True)
data_X=np.array(data_scaled)#特征组合x,这是要进⾏⽹络输⼊所⽤的所有特征值
return data_X,data_y
if(submat_flg==1):
data_X=np.array(data_scaled)#特征组合x,这是要进⾏⽹络输⼊所⽤的所有特征值
return data_X,data_y
四.创建逻辑回归模型
创建计算图,使⽤逻辑回归算法根据预处理过的数据计算模型参数(纯套路,构建图,填充数据集) 我们打算使⽤逻辑回归法,要⽤到的
式⼦为 y=w0x0+w1x1+w2x2+y=w0x0+w1x1+w2x2+b 这样的⽅式求出其中的w和b,这是要计算出的模型参数。
y=w0x0+w1x1+w2x2+b ,这样的⽅式求出其中的w和b,这是要计算出的模型参数。
def LR(data_X,data_y):
X_train,X_test,y_train,y_test=train_test_split(data_X,data_y,test_size=0.1,random_state=0)#按⽐例系数划分训练集和测试集
#接下来的操作应该是将标签值确定的转化为1或者0标签
y_at([1-y_train,y_train],1)
y_at([1-y_test,y_test],1)
learning_rate=0.0005
training_epochs=25
batch_size=10
display_step=10
n_samples=X_train.shape[0]
n_feature=X_train.shape[1]
n_class=2#⽬标是进⾏⼆分类
#设定占位符,模型变量和模型
小孩高烧不退
x=tf.placeholder(tf.float32,[None,n_feature])
y=tf.placeholder(tf.float32,[None,n_class])
W=tf.s([n_feature,n_class]),name='weight')
b=tf.s([n_class]),name='bias')
pred=tf.matmul(x,W)+b
#计算准确率和损失函数
correct_prediction=tf.equal(tf.arg_max(pred,1),tf.arg_max(y,1))
duce_mean(tf.cast(correct_prediction,tf.float32))#reduce_mean是针对张量求平均值的⼀种⽅式,⽽reduce_sum是针对的⼀种求和    duce_sigmoid_cross_entropy_with_logits(logits=pred,labels=y))
ain.MomentumOptimizer(learning_rate,0.9).minimize(cost)
init=tf.initialize_all_variables()
with tf.Session() as ss:
ss.run(init)
#进⾏50次训练批次的训练,每批次使⽤50个数据进⾏训练
for epoch in range(training_epochs):
avg_cost=0
total_batch=int(n_samples/batch_size)  #在每个训练批次⾥⾯我们都会使⽤所有的数据进⾏训练,所以这⾥会有个除式计算
for i in range(total_batch):
_,c=ss.run([optimizer,cost],feed_dict={x:X_train[i*batch_size:(i+1)*batch_size],y:y_train[i*batch_size:(i+1)*batch_size,:].eval()})
avg_cost=c/total_batch#单批次下的损失值
plt.plot(epoch+1,avg_cost,'co')#把损失值变化⽤plt图标来展⽰出来
if(epoch+1)%display_step==0:#达到⼀定批次之后进⾏准确的输出展⽰
print('Epoch:',(epoch+1),',cost=',avg_cost)
# print('the Weight: ',ss.run(W),'  ,the bias:',ss.run(b))
金匮肾气丸四大功效
X_test=ss.vert_to_tensor(X_test))
y_test=ss.vert_to_tensor(y_test))
print('Testing Accuracy:',ss.run(accurary,feed_dict={x:X_test,y:y_test}))#这个地⽅如果这样⽤,往feed_dict中传的是张量,这是tf的理解难点        plt.xlabel('Epoch')
plt.ylabel('cost')
plt.show()
W=ss.run(W)
b=ss.run(b)
return W,b
五.声明主函数
铜在空气中加热
if __name__=="__main__":
ad_csv('G:\Machine-learning\\tensorflow-train-project(jupyter)\kaggele-project6-tairanprediction\datat\\train.csv')
submat_test_ad_csv('G:\Machine-learning\\tensorflow-train-project(jupyter)\kaggele-project6-tairanprediction\datat\\test.csv')
submat_test_data_PasngerId=submat_test_data['PasngerId']
data_x,data_y=DataPreProcess(data,0)
submat_test_data_x,submat_test_data_y=DataPreProcess(submat_test_data,1)
Weight,bias=LR(data_x,data_y)
print('the W:',W,',it type is',type(W))
print('the b:',b,',it type is',type(b))
迭代的结果为:
毒蛇能吃吗五.使⽤模型预测
使⽤训练好的模型进⾏预测,并使⽤测试集⽣成预测结果,准备提交到官⽹进⾏验证
#使⽤计算得到的W和b参数重新启动计算过程在会话中进⾏获救结果的预测,并保持在⼀个csv⽂件中
n_features=submat_test_data_x.shape[1]
n_Weight=Weight.shape[1]
n_bias=bias.shape
X=tf.placeholder(tf.float32,[None,n_features])
W=tf.placeholder(tf.float32,[None,n_Weight])
B=tf.placeholder(tf.float32,n_bias)#因为是⼀维的直接放置就⾏了
yHat=tf.add(tf.matmul(X,W),B)
last_result=tf.arg_max(yHat,1)  #构建计算图,直接放置即可⾃⼰想出来的⽅法
with tf.Session() as ss2:
tf.global_variables_initializer().run()
submat_test_data_x=ss2.vert_to_tensor(submat_test_data_x))
Weight=ss2.vert_to_tensor(Weight))
bias=ss2.vert_to_tensor(bias))
print('submat shape:',submat_test_data_x.shape)
print('Weight shape:',Weight.shape)
print('bias shape:',type(bias))
predictions_to=ss2.run([last_result],feed_dict={X:submat_test_data_x,W:Weight,B:bias})#np.argmax⽤于得到数组最⼤值的索引整体获得预测结果
#predictions_to=ss2.run(tf.arg_vert_to_tensor(predictions),1))
#print('predictions:',predictions_to[0].shape)
submission=pd.DataFrame({'PasngerId':submat_test_data_PasngerId,'Survived':predictions_to[0]})#构造⼀个表,⽤于放置预测结果    predictions_to[0]语句相_csv('submit.csv',index=Fal)
对测试集进⾏预测的结果,按照官⽹的格式要求,保存在⼀个csv⽂件中,csv⽂件样式如下图,得到预测结果。
提交之后的得分是0.78左右,排名在700名左右,排名有点低,这是因为模型⽤的太简单了,如果⽤xgboost那些模型就能有很⾼的准确
率。

本文发布于:2023-07-30 13:30:28,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1123764.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:MODIS数据介绍
下一篇:svm使用详解
标签:数据   预测   模型   函数   计算
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图