对于二元分类问题来说,分类的结果和数据的特征之间仍呈现相关关系,但是y的值不再是连续的,是0~1的跃迁。但是在这个过程中,什么仍然是连续的呢?”是概率,概率是逐渐升高的,当达到一个关键点(阈值),概率就超过了0.5。那么从这个点开始,之后y的预测值都为1。


文章目录

  • 1. 导入CSV文件
  • 2.如果是二元分类,看一下分类比例
  • 3.画图
  • 4. 构建特征集和标签集
  • 5. 拆分数据集为训练集和测试集
  • 6.对数据集进行归一化(用或不用均可,都用看看谁的准确率高)
  • 7.使用哑特征
  • 7. 使用逻辑回归创建模型


1. 导入CSV文件

import numpy as np # 导入Num Py库

import pandas as pd # 导入Pandas库

df_heart = pd.read_csv('/kaggle/input/myheart/heart.csv') # 读取文件

df_heart.head() # 显示前5行数据

2.如果是二元分类,看一下分类比例

如果非二元分类,可以忽略

df_heart.分类列名.value_counts() # 输出分类值, 及各个类别数目

如果两种分类的总数相差很大,那么说明数据集很差

3.画图

可以画热力图,适用于字段少的情况,代码:

import matplotlib.pyplot as plt #Matplotlib为Python画图工具库

import seaborn as sns #Seaborn为统计学数据可视化工具库

#对所有的标签和特征两两显示其相关性的热力图

sns.heatmap(df_heart.corr(), cmap='YlGnBu', annot = True)

plt.show() #plt代表英文plot, 就是画图的意思

二分类逻辑回归预测结果 二分类逻辑回归spss_python

也可以画散点图,可以判断两个字段

plt.scatter(x=df_heart.age[df_heart.target==1],

y=df_heart.thalach[(df_heart.target==1)], c='red')

plt.scatter(x=df_heart.age[df_heart.target==0],

y=df_heart.thalach[(df_heart.target==0)], marker='^')

plt.legend(['Disease', 'No Disease']) # 显示图例

plt.xlabel('Age') # x轴标签

plt.ylabel('Heart Rate') # y轴标签
plt.show()

二分类逻辑回归预测结果 二分类逻辑回归spss_归一化_02

4. 构建特征集和标签集

特征集就是自变量集,标签集就是因变量集

X = df_heart.drop(['判断的列名'], axis = 1) # 构建特征集

y = df_heart.判断的列名.values # 构建标签集

y = y.reshape(-1, 1) # -1是相对索引, 等价于len(y)

print('张量X的形状:', X.shape)

print('张量X的形状:', y.shape)

5. 拆分数据集为训练集和测试集

from sklearn.model_selection import train_test_split

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

6.对数据集进行归一化(用或不用均可,都用看看谁的准确率高)

这步就是把所有值都变成0-1

from sklearn.preprocessing import MinMaxScaler # 导入数据缩放器

scaler = MinMaxScaler() # 选择归一化数据缩放器Min Max Scaler

X_train = scaler.fit_transform(X_train) # 特征归一化训练集fit_transform

X_test = scaler.transform(X_test) # 特征归一化测试集transform

y_train, y_test因为原本就是非0即1所以不用归一化,否则仍然需要

训练集和测试集使用不同的方法归一化

7.使用哑特征

就是比如一个字段有4种取值,0,1,2,3分别是代表不同类型,和大小无关,但是如果直接把那些字段创建模型,可能会把数字以大小判断,解决方案就是可以变成多4个字段,每个字段用1或0,

如这种类型

二分类逻辑回归预测结果 二分类逻辑回归spss_分类_03


变成

二分类逻辑回归预测结果 二分类逻辑回归spss_二分类逻辑回归预测结果_04


这样做之后会发现模型的准确率将有显著的提升

7. 使用逻辑回归创建模型

模型就是函数的意思

from sklearn.linear_model import LogisticRegression #导入逻辑回归模型

lr = LogisticRegression() # lr, 就代表是逻辑回归模型

lr.fit(X_train, y_train) # fit, 就相当于是梯度下降

print('SK learn逻辑回归测试准确率{:.2f}%'.format(lr.score(X_test, y_test)*100))