本文后面附有数据集
逻辑回归介绍
逻辑回归(Logistic Regression)是机器学习中的一种分类模型,虽然名字中带有回归, 就是因为它与回归之间有一定的联系。由于算法的简单和高效,在实际中应用非常广泛。
逻辑回归应用场景
##3 * 广告点击率 * 是否为垃圾邮件 * 是否患病 * 金融诈骗 * 虚假账号 通过上面的应用,我们可以发现其中的特点,那就是都属于两个类别之间的判断。逻辑回归 就是解决二分类问题的利器
数据准备
breast-cancer-wisconsin数据表部分
代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split#随机划分为训练子集和测试子集
from sklearn.preprocessing import StandardScaler#标准化处理
from sklearn.linear_model import LogisticRegression#逻辑回归分析
from sklearn.metrics import classification_report#分类评估报告API,显示主要分类指标的文本报告
from sklearn.metrics import roc_auc_score#计算AUG指标
"""
逻辑回归预测癌症案例分析
"""
#加载数据
data=pd.read_csv('./breast-cancer-wisconsin.data')
# print(data)
# print(data.shape)#(698, 11)
# print(data.describe())
#数据预处理
a=data.isnull().sum()
# print(a)#无缺失值
#异常值处理
data.replace('?',np.nan,inplace=True)
data.dropna(how='any',axis=0,inplace=True)
# print(data.shape)
#数据操作
#获取目标值和特征值
#这里一共11列将前10列当做特征值后几列当做目标值
x=data.iloc[:,1:10]
y=data.iloc[:,-1]
#随机划分为训练子集和测试子集,并返回划分好的训练集测试集样本和训练集测试集标签。
x_train,x_test,y_train,y_text=train_test_split(x,y,test_size=0.3)
#x_train训练集特征值
#y_train训练集目标值
#x_test测试集特征值
#y_text测试集目标值,真实值
#数据标准化处理
sd=StandardScaler()
sd.fit_transform(x_train,)
sd.fit_transform(x_test)
#进行逻辑回归预测
lr=LogisticRegression()
#训练数据
lr.fit(x_train,y_train)
#预测数据
y_predict=lr.predict(x_test)
#展示数据
# print('预测值:',y_predict)
# print('权重:',lr.coef_)
# print('偏置:',lr.intercept_)
# print('准确率:',lr.score(x_test,y_text))
#11. Class: (2 for benign, 4 for malignant) # 类别:2为良性 4为恶性
"""
预测值: [2 2 4 2 4 2 2 4 4 2 4 2 4 2 4 2 2 4 2 2 2 4 2 2 2 2 4 2 4 2 4 2 2 4 2 2 2
2 2 4 4 2 2 4 2 4 2 2 4 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 4 2 2 4 4 2 4 2 4 4
2 4 2 4 2 4 2 2 4 2 4 2 2 2 2 4 2 2 2 4 4 4 2 2 2 2 2 2 2 2 2 2 2 2 4 2 2
2 2 2 2 4 4 2 2 2 2 2 2 2 2 4 2 2 2 2 2 2 2 2 2 2 2 2 4 2 4 2 4 4 2 4 2 2
4 2 2 2 4 4 2 4 2 2 2 2 2 4 4 2 2 2 2 4 4 4 4 2 2 4 4 4 2 2 2 2 4 2 2 2 4
2 2 2 2 4 2 4 2 4 2 4 2 2 4 2 2 2 2 4 2]
权重: [[ 0.19929187 0.26384073 0.12864645 0.14809029 -0.08610739 0.35278616
0.19476982 0.19479414 0.15775163]]
偏置: [-5.73110081]
准确率: 0.965853658537
"""
#以上数值会小幅度变动
#分类评估报告API
cf=classification_report(y_text,y_predict,labels=[2,4],target_names=['良性','恶性'])
# print(cf)
"""
precision recall f1-score support
良性 0.98 0.96 0.97 141
恶性 0.92 0.95 0.94 64
avg / total 0.96 0.96 0.96 205"""
#计算AUC指标
#样本均衡不需要计算AUC
#2 代表良性 4 代表恶性
## 0.5~1 之间,越接近于 1 约好
y_text=np.where(y_text>2.5,1,0)
print(y_text)
ret=roc_auc_score(y_text,y_predict)
print(ret)
"""
[0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 1 1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 0 0 0 1 0 0 0 0 1 0 1 1 0 0 0 0 1 0 0
0 0 0 0 1 0 0 0 0 1 1 1 0 0 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 0 1 0 0 1 1 0
1 0 0 0 0 1 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 1 0 0 0 0
1 1 1 0 0 1 0 1 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0 1 1 1 0 1 0 1 0 1 0 0
0 0 0 1 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0]
0.966992271361
"""
数据集
建议csv格式打开
breast-cancer-wisconsin.data
1000025,5,1,1,1,2,1,3,1,1,2
1002945,5,4,4,5,7,10,3,2,1,2
1015425,3,1,1,1,2,2,3,1,1,2
1016277,6,8,8,1,3,4,3,7,1,2
1017023,4,1,1,3,2,1,3,1,1,2
1017122,8,10,10,8,7,10,9,7,1,4
1018099,1,1,1,1,2,10,3,1,1,2
1018561,2,1,2,1,2,1,3,1,1,2
1033078,2,1,1,1,2,1,1,1,5,2
1033078,4,2,1,1,2,1,2,1,1,2
1035283,1,1,1,1,1,1,3,1,1,2
1036172,2,1,1,1,2,1,2,1,1,2
1041801,5,3,3,3,2,3,4,4,1,4
1043999,1,1,1,1,2,3,3,1,1,2
1044572,8,7,5,10,7,9,5,5,4,4
1047630,7,4,6,4,6,1,4,3,1,4
1048672,4,1,1,1,2,1,2,1,1,2
1049815,4,1,1,1,2,1,3,1,1,2
1050670,10,7,7,6,4,10,4,1,2,4
1050718,6,1,1,1,2,1,3,1,1,2
1054590,7,3,2,10,5,10,5,4,4,4
1054593,10,5,5,3,6,7,7,10,1,4
1056784,3,1,1,1,2,1,2,1,1,2
1057013,8,4,5,1,2,?,7,3,1,4
1059552,1,1,1,1,2,1,3,1,1,2
1065726,5,2,3,4,2,7,3,6,1,4
1066373,3,2,1,1,1,1,2,1,1,2
1066979,5,1,1,1,2,1,2,1,1,2
1067444,2,1,1,1,2,1,2,1,1,2
1070935,1,1,3,1,2,1,1,1,1,2
1070935,3,1,1,1,1,1,2,1,1,2
1071760,2,1,1,1,2,1,3,1,1,2
1072179,10,7,7,3,8,5,7,4,3,4
1074610,2,1,1,2,2,1,3,1,1,2
1075123,3,1,2,1,2,1,2,1,1,2
1079304,2,1,1,1,2,1,2,1,1,2
1080185,10,10,10,8,6,1,8,9,1,4
1081791,6,2,1,1,1,1,7,1,1,2
1084584,5,4,4,9,2,10,5,6,1,4
1091262,2,5,3,3,6,7,7,5,1,4
1096800,6,6,6,9,6,?,7,8,1,2
1099510,10,4,3,1,3,3,6,5,2,4
1100524,6,10,10,2,8,10,7,3,3,4
1102573,5,6,5,6,10,1,3,1,1,4
1103608,10,10,10,4,8,1,8,10,1,4
1103722,1,1,1,1,2,1,2,1,2,2
1105257,3,7,7,4,4,9,4,8,1,4
1105524,1,1,1,1,2,1,2,1,1,2
1106095,4,1,1,3,2,1,3,1,1,2
1106829,7,8,7,2,4,8,3,8,2,4
1108370,9,5,8,1,2,3,2,1,5,4
1108449,5,3,3,4,2,4,3,4,1,4
1110102,10,3,6,2,3,5,4,10,2,4
1110503,5,5,5,8,10,8,7,3,7,4
1110524,10,5,5,6,8,8,7,1,1,4
1111249,10,6,6,3,4,5,3,6,1,4
1112209,8,10,10,1,3,6,3,9,1,4
1113038,8,2,4,1,5,1,5,4,4,4
1113483,5,2,3,1,6,10,5,1,1,4
1113906,9,5,5,2,2,2,5,1,1,4
1115282,5,3,5,5,3,3,4,10,1,4
1115293,1,1,1,1,2,2,2,1,1,2
1116116,9,10,10,1,10,8,3,3,1,4
1116132,6,3,4,1,5,2,3,9,1,4
1116192,1,1,1,1,2,1,2,1,1,2
1116998,10,4,2,1,3,2,4,3,10,4
1117152,4,1,1,1,2,1,3,1,1,2
1118039,5,3,4,1,8,10,4,9,1,4
1120559,8,3,8,3,4,9,8,9,8,4
1121732,1,1,1,1,2,1,3,2,1,2
1121919,5,1,3,1,2,1,2,1,1,2
1123061,6,10,2,8,10,2,7,8,10,4
1124651,1,3,3,2,2,1,7,2,1,2
1125035,9,4,5,10,6,10,4,8,1,4
1126417,10,6,4,1,3,4,3,2,3,4
1131294,1,1,2,1,2,2,4,2,1,2
1132347,1,1,4,1,2,1,2,1,1,2
1133041,5,3,1,2,2,1,2,1,1,2
1133136,3,1,1,1,2,3,3,1,1,2
1136142,2,1,1,1,3,1,2,1,1,2
1137156,2,2,2,1,1,1,7,1,1,2
1143978,4,1,1,2,2,1,2,1,1,2
1143978,5,2,1,1,2,1,3,1,1,2
1147044,3,1,1,1,2,2,7,1,1,2
11