Tensorflow2.0入门二分类问题-breast_cancer数据集进行逻辑回归预测

Tensorflow2.0入门二分类问题-breast_cancer数据集进行逻辑回归预测

1、导入数据

import pandas as pd

data = pd.read_csv('\\naconda_dir\\breast_cancer.csv',header = None)
data.iloc[:,-1].value_counts()  #查看分类数据是否均匀

没有下载数据,可以从这里下载

链接:https://pan.baidu.com/s/1gnjqU5MPlorNrFkyppcPTw
提取码:c58o

注意:使用pandas提取数据的时候 header = None代表这个文件没有列索引,会自动生成默认数字的索引,如果想让第一行为列索引那就设置为 header=0,header=0 取第一行为列标签, 第一列作为行标签只需要在 加上 index _col=0

2、数据预处理

2.1、归一化

%matplotlib notebook

import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
from sklearn.decomposition import PCA

import warnings
warnings.filterwarnings("ignore")


#获取特征和标签值
x_data = data.iloc[:,:-1]     #获取特征
y_data = data.iloc[:,-1]       #获取标签

"""数据归一化(最大最小方法)"""
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(x_data)   #训练
x_data = scaler.transform(x_data)     #此时输出的x_data就是数组了 

2.2、主成分分析

#pca降维
pca_model = PCA(n_components=10).fit(x_data)  #代表提取的主成分有10个特征
x_pca_data = pca_model.transform(x_data)     
x_pca_data

在这里插入图片描述

3、模型搭建

model = tf.keras.Sequential([
        tf.keras.layers.Dense(64, activation='relu', input_shape=(10,)),  #10维数据
        tf.keras.layers.Dense(64, activation='relu'),
        tf.keras.layers.Dense(1,activation='sigmoid')  
    ])  
model.summary()

在这里插入图片描述
编译和训练

model.compile(loss='binary_crossentropy',
             optimizer='adam',
             metrics=['acc'])

# history = model.fit(x_pca_data, y_data, epochs=100, validation_split=0.1)
history = model.fit(x_pca_data, y_data, epochs=100)

hist = pd.DataFrame(history.history)
hist['epoch'] = history.epoch

注意!!!!!
(1)如果是二分类的话,损失函数就使用binary_crossentropy
(2)如果是多分类的话,那么分成两种情况:一、分类标签是由单个数字代替的,那么损失函数使用categorical_crossrntropy。二、分类标签是由one_hot(热编码)编写的,损失函数是sparse_categorical_crossrntropy
(3)还有要注意的一点是,输出层的分类数据预测的激活函数应该是sigmoid,如果是回归函数预测应该是relu

4、绘制损失函数和准确率图像

%matplotlib notebook
import matplotlib.pyplot as plt

def plot_history(hist):
    plt.figure(figsize=(10,5))
    plt.subplot(1,2,1)
    plt.xlabel('Epoch')
    plt.plot(hist['epoch'], hist['loss'],
           label='loss')
    plt.legend()
    plt.subplot(1,2,2)
    plt.xlabel('Epoch')
    plt.plot(hist['epoch'], hist['acc'],
           label = 'acc',color = 'red')
    plt.legend()
plot_history(hist)

在这里插入图片描述

5、预测效果展示

"""查看训练效果,从中随机提取20个数据下标"""
indices = np.random.choice(len(data), size=20) 
# house_data.loc[indices,:]
count = 0
for n in indices:
    count += 1
    x_test = x_pca_data[n]
    x_test = x_test.reshape(1,10)
    predict = model.predict(x_test)
    print("——第%d个数据——"% count)
    predict = np.random.choice([0,1],size=1,p = [1-predict[0][0], predict[0][0]])
    print("预测值:%f" % predict)
    target = y_data[n]
    print("标签值:%f" % target)
    print('\n')

在这里插入图片描述
注意!!!!:这个predict是个二维数组所以np.random.choice([0,1],size=1,p = [1-predict[0][0], predict[0][0]])
才用predict[0][0]

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python量化投资、代码解析与论文精读

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值