def lm_fit():
    file = "../data/model.xls"
    net_file = "../tmp/model.xls"
    data = pd.read_excel(file)
    data = data.as_matrix()
    p = 0.8
    train = data[:int(len(data) * p), :]
    test = data[int(len(data) * p):, :]

    net = Sequential()
    net.add(Dense(input_dim=3, units=10))
    net.add(Activation('relu'))
    net.add(Dense(input_dim=10, units=1))
    net.add(Activation('sigmoid'))
    net.compile(loss='binary_crossentropy',
                optimizer='adam',
                sample_weight_mode='binary')
    net.fit(train[:, :3], train[:, 3], nb_epoch=1000, batch_size=1)
    net.save_weights(net_file)
    predict_result = net.predict_classes(train[:, :3]).reshape(len(train))
    cm_plot(train[:, 3], predict_result).show()
示例#2
0
    if (prediction > 0):
        pred.append(1)
    else:
        pred.append(0)

for i in range(0, len(data_test)):
    prediction = netModel.activate(
        (data_test[i][0], data_test[i][1], data_test[i][2]))
    if prediction > 0:
        sum += 1
        test.append(1)
    else:
        test.append(0)

print sum
#print result

from cm_plot import *  #导入自行编写的混淆矩阵可视化函数
cm_plot(really, pred).show()  #显示混淆矩阵可视化结果
#注意到Scikit-Learn使用predict方法直接给出预测结果。

from sklearn.metrics import roc_curve  #导入ROC曲线函数
fpr, tpr, thresholds = roc_curve(really, pred, pos_label=1)
plt.plot(fpr, tpr, linewidth=2, label='ROC of BP', color='green')  #作出ROC曲线
plt.xlabel('False Positive Rate')  #坐标轴标签
plt.ylabel('True Positive Rate')  #坐标轴标签
plt.ylim(0, 1.05)  #边界范围
plt.xlim(0, 1.05)  #边界范围
plt.legend(loc=4)  #图例
plt.show()  #显示作图结果
x_data = x.values.astype(int)
y = data.iloc[:, 3]
y_data = y.values.astype(int)
print(x_data, y_data)

# 建立和训练模型
model = Sequential()
model.add(Dense(3, input_shape=(3, )))
model.add(Activation('relu'))  # 用relu函数做激活函数,能大幅度提高准确度
model.add(Dense(1))
model.add(Activation('sigmoid'))  # 由于是0-1输出,所以用sigmoid函数做激活函数
"""
编译模型:
1.由于使用的是二元分类,所以指定损失函数为binary_crossentropy,以及模型为binary
2.其他常见的损失函数还有mean_squared_error\categroical_crossentropy等
3.求解方法(优化器)用adam,此外常用的还有sgd、rmsprop等可选
"""
model.compile(loss='binary_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

result = model.fit(x=x_data, y=y_data, epochs=1000, batch_size=10)  # 训练模型1000次
yp = model.predict_classes(x_data).reshape(len(y_data))  # 分类预测
print(
    yp
)  # [1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0]

from cm_plot import *

cm_plot(y_data, yp).show()
示例#4
0
# 分割训练集/测试集
p = 0.8
train = data[:int(len(data)*p),:]
test = data[int(len(data)*p):,:]

# 决策树
from sklearn.tree import DecisionTreeClassifier
treefile = '../tmp/tree.pkl'
tree = DecisionTreeClassifier()
tree.fit(train[:,:3],train[:,3])
from sklearn.externals import joblib
joblib.dump(tree,treefile)

# 混淆矩阵
from cm_plot import *
cm_plot(train[:,3],tree.predict(train[:,:3])).savefig('../tmp/dt_cm.png')

# ROC曲线
from sklearn.metrics import roc_curve
import matplotlib.pyplot as plt
plt.clf()
fpr,tpr,thresholds = roc_curve(test[:,3],tree.predict_proba(test[:,:3])[:,1],pos_label=1)
plt.plot(fpr,tpr,linewidth=2,label='ROC of CART')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.ylim(0,1.05)
plt.xlim(0,1.05)
plt.legend(loc=4)
plt.savefig('../tmp/dt_roc.png')

示例#5
0
netfile = 'net.model'  #构建的神经网络模型存储路径

net = Sequential()  #建立神经网络
net.add(Dense(input_dim=3, output_dim=10))  #添加输入层(3节点)到隐藏层(10节点)的连接
net.add(Activation('relu'))  #隐藏层使用relu激活函数
net.add(Dense(input_dim=10, output_dim=1))  #添加隐藏层(10节点)到输出层(1节点)的连接
net.add(Activation('sigmoid'))  #输出层使用sigmoid激活函数
net.compile(loss='binary_crossentropy', optimizer='adam',
            class_mode="binary")  #编译模型,使用adam方法求解

net.fit(train[:, :3], train[:, 3], nb_epoch=1000, batch_size=1)  #训练模型,循环1000次
net.save_weights(netfile)  #保存模型

predict_result = net.predict_classes(train[:, :3]).reshape(len(train))  #预测结果变形
'''这里要提醒的是,keras用predict给出预测概率,predict_classes才是给出预测类别,而且两者的预测结果都是n x 1维数组,而不是通常的 1 x n'''

from cm_plot import *  #导入自行编写的混淆矩阵可视化函数

cm_plot(train[:, 3], predict_result).show()  #显示混淆矩阵可视化结果

from sklearn.metrics import roc_curve  #导入ROC曲线函数

predict_result = net.predict(test[:, :3]).reshape(len(test))
fpr, tpr, thresholds = roc_curve(test[:, 3], predict_result, pos_label=1)
plt.plot(fpr, tpr, linewidth=2, label='ROC of LM')  #作出ROC曲线
plt.xlabel('False Positive Rate')  #坐标轴标签
plt.ylabel('True Positive Rate')  #坐标轴标签
plt.ylim(0, 1.05)  #边界范围
plt.xlim(0, 1.05)  #边界范围
plt.legend(loc=4)  #图例
plt.show()  #显示作图结果
示例#6
0
#Compile Model:
#Because of binary classify, we use binary_crossentropy and binary
#Other loss functions are mean_squared_error, categorical_crossentropy etc, see help docs
#We also use adam,and sgd, rmsprop as options
model.compile(loss = 'binary_crossentropy',
              optimizer = 'adam')

model.fit(x, y, epochs = 100, batch_size = 10) #Train model, machine-learning 1000 times
yp = model.predict_classes(x).reshape(len(y)) #Classify predict

#!pip install cm_plot

"""def cm_plot(y, yp):
    from sklearn.metrics import confusion_matrix#Import confusion_matrix function
    cm = confusion_matrix(y, yp)#confusion matrix
    import matplotlib.pyplot as plt #Import plotlibrary
    #More usage of cm.Greens,please read official website
    plt.matshow(cm, cmap=plt.cm.Greens)
    plt.colorbar()
    for x in range(len(cm)): #Data Label
        for y in range(len(cm)):
            plt.annotate(cm[x,y], xy=(x, y), horizontalalignment='center', verticalalignment='center')
    plt.ylabel('True label') #Axis Label
    plt.xlabel('Predicted label') #Axis Label
    return plt"""
from cm_plot import *
cm_plot(y, yp).savefig('./data/neiral_network.png')

print("Done on this run of neural_network_model_training by DK ", datetime.now())
示例#7
0
#数据是类别标签,要将它转换为数据
#用1来表示“好”、“是”、“高”这三个属性,用0来表示“坏”、“否”、“低”
data[data == u'好'] = 1
data[data == u'是'] = 1
data[data == u'高'] = 1
data[data != 1] = 0
x = data.iloc[:, :3].as_matrix().astype(int)
y = data.iloc[:, 3].as_matrix().astype(int)

from keras.models import Sequential
from keras.layers.core import Dense, Activation

model = Sequential()  #建立模型
model.add(Dense(3, 10))
model.add(Activation('relu'))  #用relu函数作为激活函数,能够大幅提供准确度
model.add(Dense(10, 1))
model.add(Activation('sigmoid'))  #由于是0-1输出,用sigmoid函数作为激活函数

model.compile(loss='binary_crossentropy',
              optimizer='adam',
              class_mode='binary')
#编译模型。由于我们做的是二元分类,所以我们指定损失函数为binary_crossentropy,以及模式为binary
#另外常见的损失函数还有mean_squared_error、categorical_crossentropy等,请阅读帮助文件。
#求解方法我们指定用adam,还有sgd、rmsprop等可选

model.fit(x, y, nb_epoch=1000, batch_size=10)  #训练模型,学习一千次
yp = model.predict_classes(x).reshape(len(y))  #分类预测

from cm_plot import *  #导入自行编写的混淆矩阵可视化函数
cm_plot(y, yp).show()  #显示混淆矩阵可视化结果
netfile = '../tmp/net.model' #构建的神经网络模型存储路径

net = Sequential() #建立神经网络
net.add(Dense(10, input_shape=(3,))) #添加输入层(3节点)到隐藏层(10节点)的连接
net.add(Activation('relu')) #隐藏层使用relu激活函数
net.add(Dense(1, input_shape=(10,))) #添加隐藏层(10节点)到输出层(1节点)的连接
'''Dense的参数把书里的改了,否则报错 Layer is not connected. Did you forget to set "input_shape"?'''
net.add(Activation('sigmoid')) #输出层使用sigmoid激活函数
net.compile(loss = 'binary_crossentropy', optimizer = 'adam', class_mode = "binary") #编译模型,使用adam方法求解

net.fit(train[:,:3], train[:,3], nb_epoch=1000, batch_size=1) #训练模型,循环1000次 #前三列是神经网络的输入X,第四列是输出Y
net.save_weights(netfile) #保存模型

predict_result = net.predict_classes(train[:,:3]).reshape(len(train)) #预测结果变形
'''这里要提醒的是,keras用predict给出预测概率,predict_classes才是给出预测类别,而且两者的预测结果都是n x 1维数组,而不是通常的 1 x n'''

from cm_plot import * #导入自行编写的混淆矩阵可视化函数
cm_plot(train[:,3], predict_result).show() #显示混淆矩阵可视化结果

from sklearn.metrics import roc_curve #导入ROC曲线函数

predict_result = net.predict(test[:,:3]).reshape(len(test))
fpr, tpr, thresholds = roc_curve(test[:,3], predict_result, pos_label=1)
plt.plot(fpr, tpr, linewidth=2, label = 'ROC of LM') #作出ROC曲线
plt.xlabel('False Positive Rate') #坐标轴标签
plt.ylabel('True Positive Rate') #坐标轴标签
plt.ylim(0,1.05) #边界范围
plt.xlim(0,1.05) #边界范围
plt.legend(loc=4) #图例
plt.show() #显示作图结果
示例#9
0
train_filename = '/Users/Mac/Desktop/train_neural_network_data.xls'
test_filename = '/Users/Mac/Desktop/test_neural_network_data.xls'
train_data = pd.read_excel(train_filename)
test_data = pd.read_excel(test_filename)
y_train_data = train_data.iloc[:, 4].as_matrix()
x_train_data = train_data.iloc[:, 5:16].as_matrix()
y_test_data = test_data.iloc[:, 4].as_matrix()
x_test_data = test_data.iloc[:, 5:16].as_matrix()

from keras.models import Sequential
from keras.layers.core import Dense, Activation

model = Sequential()
model.add(Dense(units=17, input_dim=11))
model.add(Activation('relu'))
model.add(Dense(units=10))
model.add(Activation('relu'))
model.add(Dense(units=1))
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])
model.fit(x_train_data, y_train_data, nb_epoch=150, batch_size=1)

y_pre = model.predict_classes(x_test_data)

from cm_plot import *

cm_plot(y_test_data, y_pre).show()
"""-----------------------CART决策树模型构建---------------------------"""
from sklearn.tree import DecisionTreeClassifier   # 导入决策树模型

# 建立模型并训练
tree = DecisionTreeClassifier()
tree.fit(train_data[:, :3], train_data[:, 3])

# 保存模型
from sklearn.externals import joblib
output_file = '../outputfiles/窃漏电用户自动识别CART决策树模型.pkl'
joblib.dump(tree, output_file)

# 用cm_plot模块可视化混淆矩阵
from cm_plot import *
cm_plot(train_data[:, 3], tree.predict(train_data[:, :3])) # sklearn使用predict方法直接给出预测结果
plt.show()
# plt.savefig('../outputfiles/窃漏电用户自动识别决策树预测结果的混淆矩阵.jpg')

"""-----------------------用ROC曲线评价模型,使用测试集数据---------------------------"""
from sklearn.metrics import roc_curve   # 导入roc曲线绘制的函数

fpr, tpr, thresholds = roc_curve(test_data[:, 3], tree.predict_proba(test_data[:, :3])[:, 1], pos_label=1)
plt.plot(fpr, tpr, linewidth=2, label='ROC of CART')  # 绘制roc曲线
plt.ylabel('True Positive Rate')    # 设置y坐标轴标签
plt.xlabel('False Positive Rate')   # 设置x坐标轴标签
plt.ylim(0, 1.05)    # 设置y轴方向的边界范围
plt.xlim(0, 1.05)    # 设置x轴方向的边界范围
plt.legend(loc=4)    # 设置图例
# plt.show()
plt.savefig('../outputfiles/窃漏电用户自动识别的CART决策树模型评价的ROC曲线.jpg')
# 模型训练1000轮,并保存参数
net.fit(x=train_data[:, :3], y=train_data[:, 3], epochs=1000, batch_size=1)
output_file = '../outputfiles/电力窃漏电用户自动识别的LM神经网络模型.model'
net.save_weights(output_file)   # 保存为HDF5文件类型
# 再次使用需要导入from keras.models import load_model
# 并用model.load_model(filepath)载入模型


# 用模型进行预测
predict_result = net.predict_classes(train_data[:, :3]).reshape(len(train_data))  # 预测结果变形
# keras的predict给出预测概率,predict_classes才是给出预测类别,而且两者的预测结果都是n*1维数组,而不是通常的1*n维

# 用cm_plot模块可视化混淆矩阵
from cm_plot import *
cm_plot(train_data[:, 3], predict_result)
plt.show()
# plt.savefig('../outputfiles/窃漏电用户自动识别LM神经网络预测结果的混淆矩阵.jpg')

"""-----------------------用ROC曲线评价模型,使用测试集数据---------------------------"""
from sklearn.metrics import roc_curve   # 导入roc曲线绘制的函数

test_predict_result = net.predict_classes(test_data[:, :3]).reshape(len(test_data)) # 预测结果变形
fpr, tpr, thresholds = roc_curve(test_data[:, 3], test_predict_result, pos_label=1)
plt.plot(fpr, tpr, linewidth=2, label='ROC of LM')  # 绘制roc曲线
plt.ylabel('True Positive Rate')    # 设置y坐标轴标签
plt.xlabel('False Positive Rate')   # 设置x坐标轴标签
plt.ylim(0, 1.05)    # 设置y轴方向的边界范围
plt.xlim(0, 1.05)    # 设置x轴方向的边界范围
plt.legend(loc=4)    # 设置图例
plt.show()
示例#12
0
# 输出层使用sigmoid激活函数
net.add(Activation('sigmoid'))
# 编译模型,用adam求解
net.compile(loss='binary_crossentropy',optimizer='adam',class_mode='binary')
# 训练模型,循环1000次
net.fit(train[:,:3],train[:,3],nb_epoch=100,batch_size=1)
# 保存模型
net.save_weights(netFile)

# 这里要提醒的是,Keras用predict给出预测概率,predict_classes才是给出预测类型,
# 而且两者的预测结果都是n*1维数组,而不是通常的1*n
predict_result = net.predict_classes(train[:,:3]).reshape(len(train))

# 导入自行编写的混淆矩阵可视化函数
from cm_plot import *
cm_plot(train[:,3],predict_result).show()

# 代码清单6-5 绘制决策树模型的ROC曲线
# 导入ROC曲线函数
from sklearn.metrics import roc_curve
import matplotlib.pyplot as plt

# 预测结果变形
predict_result = net.predict(test[:,:3]).reshape(len(test))
fpr,tpr,thresholds = roc_curve(test[:,3],predict_result,pos_label=1)
# 作出ROC曲线
plt.plot(fpr,tpr,linewidth=2,label='ROC of LM')
# 坐标轴标签
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
# 边界范围
示例#13
0
from keras.layers.core import Dense,Activation

netfile = '../tmp/net.model'
# 构建神经网络
net = Sequential()
net.add(Dense(10,input_shape=(3,)))
net.add(Activation('relu'))
net.add(Dense(1,input_shape=(10,)))
net.add(Activation('sigmoid'))
net.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy','binary_accuracy'])
# 喂数据、训练、预测
net.fit(train[:,:3],train[:,3],epochs=100,batch_size=1)
net.save_weights(netfile)
predict_result = net.predict_classes(train[:,:3]).reshape(len(train))
# 混淆矩阵图
from cm_plot import *
cm_plot(train[:,3],predict_result).savefig('../tmp/lm_cm.png')

# ROC曲线
from sklearn.metrics import roc_curve
import matplotlib.pyplot as plt
plt.clf()
predict_result = net.predict(test[:,:3]).reshape(len(test))
fpr,tpr,thresholds = roc_curve(test[:,3],predict_result,pos_label=1)
plt.plot(fpr,tpr,linewidth=2,label='ROC of LM')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.ylim(0,1.05)
plt.xlim(0,1.05)
plt.legend(loc=4)
plt.savefig('../tmp/lm_roc.png')
示例#14
0
 clf = clf.fit(train_data, train_label)
 # 可视化
 dataLabels = [
     'ZL',
     'ZR',
     'ZF',
     'ZM',
     'ZC',
 ]
 data_list = []
 data_dict = {}
 for each_label in dataLabels:
     for each in data:
         data_list.append(each[dataLabels.index(each_label)])
     data_dict[each_label] = data_list
     data_list = []
 lenses_pd = pd.DataFrame(data_dict)
 print(lenses_pd.keys())
 dot_data = StringIO()
 tree.export_graphviz(clf,
                      out_file=dot_data,
                      feature_names=lenses_pd.keys(),
                      class_names=clf.classes_,
                      filled=True,
                      rounded=True,
                      special_characters=True)
 graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
 graph.write_pdf("tree.pdf")
 from cm_plot import *
 cm_plot(test_label, clf.predict(test_data)).show()
示例#15
0
data = pd.read_excel(inputfile, index_col = u'序号') #导入数据

#数据是类别标签,要将它转换为数据
#用1来表示“好”、“是”、“高”这三个属性,用0来表示“坏”、“否”、“低”
data[data == u'好'] = 1
data[data == u'是'] = 1
data[data == u'高'] = 1
data[data != 1] = 0
x = data.iloc[:,:3].as_matrix().astype(int)
y = data.iloc[:,3].as_matrix().astype(int)

from keras.models import Sequential
from keras.layers.core import Dense, Activation

model = Sequential() #建立模型
model.add(Dense(3,10))
model.add(Activation('relu')) #用relu函数作为激活函数,能够大幅提供准确度
model.add(Dense(10, 1))
model.add(Activation('sigmoid')) #由于是0-1输出,用sigmoid函数作为激活函数

model.compile(loss = 'binary_crossentropy', optimizer = 'adam', class_mode = 'binary')
#编译模型。由于我们做的是二元分类,所以我们指定损失函数为binary_crossentropy,以及模式为binary
#另外常见的损失函数还有mean_squared_error、categorical_crossentropy等,请阅读帮助文件。
#求解方法我们指定用adam,还有sgd、rmsprop等可选

model.fit(x, y, nb_epoch = 1000, batch_size = 10) #训练模型,学习一千次
yp = model.predict_classes(x).reshape(len(y)) #分类预测

from cm_plot import * #导入自行编写的混淆矩阵可视化函数
cm_plot(y,yp).show() #显示混淆矩阵可视化结果
示例#16
0
model.add(Dense(units=10, input_dim=17))  # 添加隐藏层、二层隐藏层的连接
model.add(Activation('relu'))  # 以relu函数为激活函数
model.add(Dense(units=1, input_dim=10))  # 添加二层隐藏层、输出层的连接
model.add(Activation('sigmoid'))  # 以sigmoid函数为激活函数

# 编译模型,损失函数为binary_crossentropy,用adam法求解
model.compile(loss='binary_crossentropy', optimizer='adam')
model.fit(x_train, y_train, nb_epoch=1000, batch_size=1)
model.save_weights(netfile)  # 保存模型参数

# In[6]:

predict_result_train = model.predict_classes(x_train).reshape(
    len(data_train))  #给出预测类别(训练集)
from cm_plot import *
cm_plot(y_train, predict_result_train).show()  #显示混淆矩阵可视化结果 看训练结果正确率

# In[11]:

from sklearn.metrics import confusion_matrix
predict_result_test = model.predict_classes(x_test).reshape(
    len(data_test))  #给出预测类别(测试集)
from cm_plot import *
cm = confusion_matrix(y_test, predict_result_test)
cm_plot(y_test, predict_result_test).show()  #显示混淆矩阵可视化结果 看训练结果正确率

# In[13]:

from __future__ import division
correctRate = (cm[1, 1] + cm[0, 0]) / cm.sum()
correctRate
# net.save_weights(netfile)  # 仅保存模型的权重参数,导入前需要规定好神经网络的结构,导入用model.load_weight,占空间较小
model.save(modelfile)  # 保存模型整体结构,导入用 model.load() 占空间最大,保存的是.h5文件
'''预测结果     这里仅展示predict_classes的用法,实际绘制ROC曲线图 与 混淆矩阵时,要通过test,即测试集的数据,来评判性能指标。
    ## 注: keras中,
        predict:表示预测概率,
        predict_classes:表示预测类别
        两者的预测结果都是n * 1维数组,而不是通常的 1 * n'''
# predict_result = model.predict_classes(train[:,:1000]).reshape(len(train)) #训练集,预测结果
# predict_result = model.predict_classes(dev[:,:1000]).reshape(len(dev)) #验证集,预测结果
predict_result = model.predict_classes(test[:, :1000]).reshape(
    len(test))  #测试集,预测结果(通过测试集来进行性能评判)
'''性能评判  混淆矩阵'''
from cm_plot import *  # 导入自行编写的混淆矩阵可视化函数
# cm_plot(train[:, 1000], predict_result).show() # 显示 训练集 混淆矩阵可视化结果
cm_plot(test[:, 1000], predict_result).show()  # 显示 训练集 混淆矩阵可视化结果
'''性能评判  ROC曲线'''
from sklearn.metrics import roc_curve  # 导入ROC曲线函数
import matplotlib.pyplot as plt

fpr, tpr, thresholds = roc_curve(test[:, 1000], predict_result, pos_label=1)
plt.plot(fpr, tpr, linewidth=2, label='ROC of LM')  # 作出ROC曲线
plt.xlabel('False Positive Rate')  # 坐标轴标签
plt.ylabel('True Positive Rate')  # 坐标轴标签
plt.ylim(0, 1.05)  # 边界范围
plt.xlim(0, 1.05)  # 边界范围
plt.legend(loc=4)  # 图例
plt.show()  # 显示作图结果
'''性能分析  loss曲线'''
import matplotlib.pyplot as plt
''' 当训练完成后,model.fit会返回一个history,其中保存了训练过程中的所有数据
示例#18
0
# 数据前处理的代码重复部分略去
# 构建CART决策树模型
from sklearn.tree import DecisionTreeClassifier

treefile = '/Users/Mac/Desktop/tree.pkl'
tree = DecisionTreeClassifier()
tree.fit(train[:,:3],train[:,3])

from sklearn.externals import joblib
joblib.dump(tree, treefile)     # 这里使用joblib模块来保存模型数据

from cm_plot import *
cm_plot(train[:,3], tree.predict(train[:,:3])).show()


# 数据前处理部分略去
#模型测试
from sklearn.metrics import roc_curve
import matplotlib.pyplot as plt
from sklearn.externals import joblib

tree = joblib.load('/Users/Mac/Desktop/tree.pkl')

fpr, tpr, thresholds = roc_curve(test[:,3], tree.predict_proba(test[:,:3])[:,1],pos_label=1)
plt.plot(fpr, tpr, linewidth = 2, label = 'ROC of CART')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.ylim(0, 1.05)
plt.xlim(0, 1.05)
plt.legend(loc=4)
plt.show()
示例#19
0
    for j in range(0,4):
        if origin[j] == 1:
            really.append(j)
            break


print predictions


#from sklearn.metrics import f1_score
#print("F-score: {0:.2f}".format(f1_score(predictions,really)))


from cm_plot import * #导入自行编写的混淆矩阵可视化函数
cm_plot(really, predictions).show() #显示混淆矩阵可视化结果
#注意到Scikit-Learn使用predict方法直接给出预测结果。


from sklearn.metrics import roc_curve #导入ROC曲线函数
fpr, tpr, thresholds = roc_curve(really, predictions, pos_label=1)
plt.plot(fpr, tpr, linewidth=2, label = 'ROC of BP', color = 'green') #作出ROC曲线
plt.xlabel('False Positive Rate') #坐标轴标签
plt.ylabel('True Positive Rate') #坐标轴标签
plt.ylim(0,1.05) #边界范围
plt.xlim(0,1.05) #边界范围
plt.legend(loc=4) #图例
plt.show() #显示作图结果


示例#20
0
inputfile = 'E:\\pythonDataSet\\chapter5\\demo\\data\\sales_data.xls'
data = pd.read_excel(inputfile, index_col=u'序号')

data[data == u'好'] = 1
data[data == u'是'] = 1
data[data == u'高'] = 1
data[data != 1] = -1

X = data.iloc[:, :3].as_matrix().astype(int)
y = data.iloc[:, 3].as_matrix().astype(int)
print X, y

from keras.models import Sequential
from keras.layers.core import Dense, Activation

model = Sequential()
model.add(Dense(3, 10))
model.add(Activation('relu'))
model.add(Dense(10, 1))
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer='adam',
              class_mode='binary')

model.fit(X, y, nb_epoch=1000, batch_size=10)
yp = model.predict_classes(X).reshape(len(y))

from cm_plot import *
cm_plot(y, yp).show()
示例#21
0
netfile = "./tmp/net.model2"  # 构建的神经网络模型存储路径

net = Sequential()  # 建立神经网络
net.add(Dense(input_dim=3, units=10))  # 添加输入层(3节点)到隐藏层(10节点)的连接
net.add(Activation("relu"))  # 隐藏层使用relu激活函数
net.add(Dense(input_dim=10, units=1))  # 添加隐藏层(10节点)到输出层(1节点)的连接
net.add(Activation("sigmoid"))  # 输出层使用sigmoid激活函数
net.compile(loss="binary_crossentropy", optimizer="adam")  # 编译模型,使用adam方法求解

net.fit(train[:, :3], train[:, 3], epochs=40, batch_size=1)  # 训练模型,循环1000次
net.save(netfile)
#print("Baseline Error: %.2f%%"%(100-scores)*100)

predict_result = net.predict_classes(train[:, :3]).reshape(
    len(train))  # 预测结果变形

from cm_plot import *
cm_plot(train[:, 3], predict_result).show()

from sklearn.metrics import roc_curve  # 导入ROC曲线函数

predict_result = net.predict(test[:, :3]).reshape(len(test))
fpr, tpr, thresholds = roc_curve(test[:, 3], predict_result, pos_label=1)
plt.plot(fpr, tpr, linewidth=2, label="ROC of LM")
plt.xlabel("False Positive Rate")
plt.ylabel("True Positive Rate")
plt.ylim(0, 1.05)
plt.xlim(0, 1.05)
plt.legend(loc=4)
plt.show()
示例#22
0
# !/usr/bin/env python

# _*_ coding: utf-8 _*_

import pandas as pd

train_filename = '/Users/Mac/Desktop/train_neural_network_data.xls'
test_filename = '/Users/Mac/Desktop/test_neural_network_data.xls'
train_data = pd.read_excel(train_filename)
test_data = pd.read_excel(test_filename)
y_train_data = train_data.iloc[:, 4].as_matrix()
x_train_data = train_data.iloc[:, 5:16].as_matrix()
y_test_data = test_data.iloc[:, 4].as_matrix()
x_test_data = test_data.iloc[:, 5:16].as_matrix()

from sklearn import svm
model = svm.SVC()
model.fit(x_train_data, y_train_data)

from cm_plot import *
cm_plot(y_test_data, model.predict(x_test_data)).show()
x_test = data[int(0.8 * len(data)):, :6]
y_test = data[int(0.8 * len(data)):, 6]

from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.metrics import accuracy_score
import pydotplus
from cm_plot import *

model = DecisionTreeClassifier()
model.fit(x_train, y_train.astype('int'))

# 使用accuracy_score函数计算正确率
train_accuracy = accuracy_score(y_train, model.predict(x_train))
test_accuracy = accuracy_score(y_test, model.predict(x_test))

# 绘制混淆矩阵
cm_plot(y_train, model.predict(x_train)).show()
cm_plot(y_test, model.predict(x_test)).show()

# 输出决策树可视化文件
dot_data = export_graphviz(model,
                           out_file=None,
                           feature_names=list(dataframe.columns)[:6])
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_pdf('/Users/Mac/Desktop/tree.pdf')
print(train_accuracy, test_accuracy)

# 结果
# train_accuracy=1.0
# test_accuracy=0.953125
示例#24
0
test = data[int(len(data) * p):, :]  # 后20%为测试集

# 构建CART决策树模型
from sklearn.tree import DecisionTreeClassifier  # 导入决策树模型

treefile = '../tmp/tree.pkl'  # 模型输出名字
tree = DecisionTreeClassifier()  # 建立决策树模型
tree.fit(train[:, :3], train[:, 3])  # 训练

# 保存模型
from sklearn.externals import joblib
joblib.dump(tree, treefile)

# 导入自行编写的混淆矩阵可视化函数
from cm_plot import *
cm_plot(train[:, 3], tree.predict(train[:, :3])).show()  # 显示混淆矩阵可视化结果

#
# a = 0
# for item in range(len(train[:, :3])):
#     if tree.predict(train[item, :3]) == train[item, 3]:
#         a += 1
# print a

# 注意到Scikit-Learn使用predict方法直接给出预测结果。

from sklearn.metrics import roc_curve  # 导入ROC曲线函数
import matplotlib.pyplot as plt

fpr, tpr, thresholds = roc_curve(test[:, 3],
                                 tree.predict_proba(test[:, :3])[:, 1],
shuffle(data) #随机打乱数据

p = 0.8 #设置训练数据比例
train = data[:int(len(data)*p),:] #前80%为训练集
test = data[int(len(data)*p):,:] #后20%为测试集

#构建CART决策树模型
from sklearn.tree import DecisionTreeClassifier #导入决策树模型

treefile = '../tmp/tree.pkl' #模型输出名字
tree = DecisionTreeClassifier() #建立决策树模型
tree.fit(train[:,:3], train[:,3]) #训练

#保存模型
from sklearn.externals import joblib
joblib.dump(tree, treefile)

from cm_plot import * #导入自行编写的混淆矩阵可视化函数
cm_plot(train[:,3], tree.predict(train[:,:3])).show() #显示混淆矩阵可视化结果
#注意到Scikit-Learn使用predict方法直接给出预测结果。

from sklearn.metrics import roc_curve #导入ROC曲线函数

fpr, tpr, thresholds = roc_curve(test[:,3], tree.predict_proba(test[:,:3])[:,1], pos_label=1)
plt.plot(fpr, tpr, linewidth=2, label = 'ROC of CART', color = 'green') #作出ROC曲线
plt.xlabel('False Positive Rate') #坐标轴标签
plt.ylabel('True Positive Rate') #坐标轴标签
plt.ylim(0,1.05) #边界范围
plt.xlim(0,1.05) #边界范围
plt.legend(loc=4) #图例
plt.show() #显示作图结果