基于深度学习框架Keras和MLP模型的电影故事数据挖掘

关于Keras

Keras是一个开放源码的高级深度学习程序库,其主要作者和维护者是Google公司的工程师FrancoisChollet,以MIT开放源码方式授权。相对于TensorFlow这样低级的链接库,Keras可以使用更少的代码和时间来完成深度学习模型的组建。目前,Keras提供了两种后端引擎:Theano与TensorFlow。

电影数据挖掘的对象为《泰坦尼克号》,数据集下载:

http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic3.xls

 

code:

import numpy                               #模块导入
import pandas as pd
from sklearn import preprocessing
numpy.random.seed(10)

all_df =pd.read_excel("data/titanic3.xls")
cols=['survived','name','pclass' ,'sex', 'age', 'sibsp',
      'parch', 'fare', 'embarked']
all_df=all_df[cols]
msk = numpy.random.rand(len(all_df)) < 0.8
train_df = all_df[msk]
test_df = all_df[~msk]
def PreprocessData(raw_df):                    #数据集预处理
    df=raw_df.drop(['name'], axis=1)
    age_mean = df['age'].mean()
    df['age'] = df['age'].fillna(age_mean)
    fare_mean = df['fare'].mean()
    df['fare'] = df['fare'].fillna(fare_mean)
    df['sex']= df['sex'].map({'female':0, 'male': 1}).astype(int)
    x_One Hot_df = pd.get_dummies(data=df,columns=["embarked" ])

    ndarray = x_One Hot_df.values
    Features = ndarray[:,1:]
    Label = ndarray[:,0]

    minmax_scale = preprocessing.MinMaxScaler(feature_range=(0, 1))
    scaledFeatures=minmax_scale.fit_transform(Features)    
    
    return scaledFeatures,Label
train_Features,train_Label=PreprocessData(train_df)
test_Features,test_Label=PreprocessData(test_df)
# from keras.models import Sequential
# from keras.layers import Dense,Dropout
model = Sequential()         #建立keras模型
model.add(Dense(units=40, input_dim=9,kernel_initializer='uniform',activation='relu'))   #输入层,隐藏层1
model.add(Dense(units=30, kernel_initializer='uniform', activation='relu'))              #隐藏层2
model.add(Dense(units=1, kernel_initializer='uniform',activation='sigmoid'))             #输出层
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])         #定义训练方式
train_history =model.fit(x=train_Features,                                                #开始训练
                         y=train_Label, 
                         validation_split=0.1,                                            #90%作训练数据,10%数据验证
                         epochs=30,                                                       #30个训练周期
                         batch_size=30,verbose=2)                                         #每次训练处理30项数据,并显示训练过程
 

图一:数据验证的准确率

接下来添加主角Jack和Rose的数据,根据电影剧情,我们作如下的数据设定:

1). Jack是3等舱,Rose是头等舱。2). Jack是男性,Rose是女性。

1). Jack票价是5,Rose票价是100。1). Jack年龄是23,Rose年龄是20。

所以,有:

Jack = pd.Series([0 ,'Jack',3, 'male'  , 23, 1, 0,  5.0000,'S'])
Rose = pd.Series([1 ,'Rose',1, 'female', 20, 1, 0, 100.0000,'S'])
JR_df = pd.DataFrame([list(Jack),list(Rose)],  
                  columns=['survived', 'name','pclass', 'sex', 
                   'age', 'sibsp','parch', 'fare','embarked'])
all_df=pd.concat([all_df,JR_df])

接下来进行预测:

all_Features,Label=PreprocessData(all_df)
all_probability=model.predict(all_Features)
pd=all_df
pd.insert(len(all_df.columns),
          'probability',all_probability)
pd[-2:]                                                                        #预测Jack and Rose 的生存概率

pd[(pd['survived']==0) &  (pd['probability']>0.9) ] #查看生存几率高,却没有存活的数据

图二:Jack and Rose的计算结果

由计算结果可以看出,基本上与电影结局是符合的。另外,查看一下特殊数据:计算出的生存几率高,却没有活下来的案例:

         

                                                                                                                图三

            

                                                                                                               图四

 

数据结果中,Allison,Miss. Helen Loraine,Mrs. Hudson J C.都是Allison家族的人,在真实案例中,Allison家族的故事是:Allison一家人共4人,爸爸(30岁),妈妈(25岁),女儿Loraine(2岁),婴儿Trevor(不满1岁)。他们全家加上一个护士(Alice Cleaver)乘坐邮轮返回加拿大蒙特利尔。因为搭乘救生艇女士优先,原本妈妈可以带着女儿与小婴儿上救生艇,但因为找不到婴儿Trevor,所以坚持不上救生艇,而在床上到处寻找婴儿,最后全家遇害。

造化弄人的是,原来婴儿早被护士带上救生艇,但没有告知Allison家人,导致全家找不到婴儿。最后影儿Trevor被送回到加拿大,由他的叔叔婶婶抚养长大。

 

survivednamepclasssexagesibspparchfareembarked00Jack3male23.0105.0S11Rose1female20.010100.0S

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值