Python数据分析——基于逻辑回归的肿瘤预测实验

Python数据分析——基于逻辑回归的肿瘤预测实验

前两天参加人工智能比赛,生了一场病,嗓子哑的说不出话。虽然这也不是偷懒的理由,但意志确实是有所消沉。最近手里也没有要忙的事情了,沉下心来敲敲代码,搞搞科研(改论文)~

一、 实验准备

1.1 实验概述

逻辑回归(Logistic Regression)
logistic回归是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理多分类问题,它实际上是属于一种分类方法,是二分类问题的概率与自变量之间的关系图形往往是一个S型曲线,采用的Sigmoid函数实现。

也是一种广义线性回归(generalized linear model),因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同,都具有 w‘x+b,其中w和b是待求参数,其区别在于他们的因变量不同,多重线性回归直接将w‘x+b作为因变量,即y =w‘x+b,而logistic回归则通过函数L将w‘x+b对应一个隐状态p,p =L(w‘x+b),然后根据p 与1-p的大小决定因变量的值。logistic回归的因变量可以是二分类的,使用sigmoid进行处理,如下图所示:

Sigmoid函数由下列公式定义,f(x)= 1 1 + e − x \frac{1}{1+e^{-x}} 1+ex1

函数的定义域为全体实数,值域在[0,1]之间,x轴在0点对应的结果为0.5。当x取值足够大的时候,可以看成0或1两类问题,大于0.5可以认为是1类问题,反之是0类问题,而刚好是0.5,则可以划分至0类或1类。

1.2 实验目的

  • 数据集内容预览,行列信息,形状大小,基本描述,行列类型
  • 数据集所包含种类分析
  • 获取指定数据内容,获取可能包含某内容的 数据集合
  • 使用bool+索引截取数据显示
  • 获取最大值、最小值、平均值

1.3 实验准备

服务器端:python3.6以上、pandas、Jupyter Notebook
客户端:Google Chrome浏览器

二、 实验步骤

2.1 导入所需包

import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler

2.2加载数据集,查看数据集信息

查看数据集内容预览、行列信息、形状大小,基本描述信息、数据类型等

cancer = load_breast_cancer()
X = cancer.data
y = cancer.target
print('data shape: {0};target shape: {1} no. positive: {2}; no. negative: {3}'.format(
    X.shape, y.shape,y[y==1].shape[0], y[y==0].shape[0]))
print(cancer.data[0])  #打印一组样本数据
print(len(cancer.feature_names))
cancer.feature_names

out

2.3 数据集划分

train_test_split函数用于将矩阵随机划分为训练子集和测试子集,并返回划分好的训练集测试集样本和训练集测试集标签。

格式:

X_train,X_test, y_train, y_test =cross_validation.train_test_split(train_data,train_target,test_size=0.3, random_state=0)

参数解释:

train_data:被划分的样本特征集

train_target:被划分的样本标签

test_size:如果是浮点数,在0-1之间,表示样本占比;如果是整数的话就是样本的数量

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

2.4 训练与测试数据标准化处理

StandardScaler类是一个用来讲数据进行归一化和标准化的类,且是针对每一个特征维度来做的,而不是针对样本。 所谓归一化和标准化,即应用下列公式:
公式
使得新的X数据集方差为1,均值为0,fit_transform方法是fit和transform的结合,fit_transform(X_train) 意思是找出X_train的 𝜇 和 𝜎 ,并应用在X_train上。这时对于X_test,我们就可以直接使用transform方法。因为此时StandardScaler已经保存了X_train的 𝜇 和 𝜎 。

scaler = StandardScaler() #作用:去均值和方差归一化。可保存训练集中的均值、方差参数,然后直接用于转换测试集数据。
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

scaler = StandardScaler()        #作用:去均值和方差归一化。可保存训练集中的均值、方差参数,然后直接用于转换测试集数据。
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

2.5 使用逻辑回归模型进行训练、并查看训练集得分。

LogisticRegression回归模型在Sklearn.linear_model子类下,调用sklearn逻辑回归算法步骤比较简单,即:

(1) 导入模型。调用逻辑回归LogisticRegression()函数。

(2) fit()训练。调用fit(x,y)的方法来训练模型,其中x为数据的属性,y为所属类型。

(3) 用score()函数对模型进行打分并查看。注:最好的得分为1.0,一般的得分都比1.0低,得分越低代表结果越差。

model = LogisticRegression()
model.fit(X_train, y_train)
train_score = model.score(X_train, y_train)
test_score = model.score(X_test, y_test)
print('train score: {train_score:.6f}; test score: {test_score:.6f}'.format(
    train_score=train_score, test_score=test_score))

显示结果如图:
result

2.6 预测

使用predict()函数进行预测。利用训练得到的模型对数据集进行预测,返回预测结果。np.equal()比较的是值,而不是类型,返回bool。

y_pred = model.predict(X_test)
print('matchs: {0}/{1}'.format(np.equal(y_pred, y_test)[np.equal(y_pred, y_test)==True].shape[0], y_test.shape[0]))

matchs: 110/114


三、总结

对最近的事情做一个记录吧,至少是全国赛进了前十,下次选题的时候参考一下最新的论文,也算是吃了文化的亏。快要开学了,开学以后自己找一找实习,暑假就不回家了,早点适应一下工作的氛围。今天就到这了,用一首点绛唇结尾。

拋尽榆钱,依然难买春光驻。
饯春无语,肠断春归路。
春去能来,人去能来否?
长亭暮,
乱山无数,只有鹃声苦。

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值