Python进行Logistic回归

Python进行Logistic回归

        • 第一步,导入库和数据;
        • 第二步,处理数据;
        • 第三步,数据建模;
        • 最后,模型评价。

第一步,导入库和数据;

# 导入库
from sklearn import datasets
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 使文字可以展示
plt.rcParams['font.sans-serif'] = ['SimHei']
# 使负号可以展示
plt.rcParams['axes.unicode_minus'] = False


# 读取数据
data = pd.read_excel('F:\\Desktop\\数据.xlsx')
data[:5]

在这里插入图片描述

第二步,处理数据;

# 增加 起点 和 终点 两列
data = pd.concat([data, pd.DataFrame(columns = ['起点', '终点'])], sort = True)

# 分割 I 列,为 起点 和 终点 列添加数据
n1 = []
for i in list(data['起终点'].values):
    i = i.split('-')
    n1.append(i)

for i in range(len(n1)):
    data['起点'][i] = n1[i][0]
    data['终点'][i] = n1[i][1]
    
import numpy as np
# 设置类标映射
class_mapping = {label:k for k,label in enumerate(np.unique(data['终点']))}
# 将类标转换为数字(这里数字仅代表类别,不代表大小)
data['终点'] = data['终点'].map(class_mapping)
data[:5]

Python进行Logistic回归_第1张图片

第三步,数据建模;

# 选取 建模 数据
data1 = data[['乘车方式', '终点', '里程距离',  '行驶时间', '是否合心意', '可支配收入', '是否报销', '购票价格', '是否舒适', '是否注重时间成本']]

# 设置 X 和 y
X = data1.iloc[:, 1:]
y = data1.iloc[:, 0]

from sklearn.cross_validation import train_test_split
# 设置训练数据集和测试数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 0)

# 数据标准化
from sklearn.preprocessing import StandardScaler
stdsc = StandardScaler()
# 将训练数据标准化
X_train_std = stdsc.fit_transform(X_train)
# 将测试数据标准化
X_test_std = stdsc.transform(X_test)

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(C = 10)
# lr在原始测试集上的表现
lr.fit(X_train_std, y_train)
# 打印训练集精确度
print('Training accuracy:', lr.score(X_train_std, y_train))
# 打印测试集精确度
print('Test accuracy:', lr.score(X_test_std, y_test))

# 打印系数
lr.coef_
# 打印截距
lr.intercept_

最后,模型评价。

# 绘制混淆矩阵
from sklearn.metrics import confusion_matrix
y_pred = lr.predict(X_test_std)
confmat = confusion_matrix(y_true=y_test, y_pred=y_pred)
print(confmat)

# 将混淆矩阵可视化
fig, ax = plt.subplots(figsize=(2.5, 2.5))
ax.matshow(confmat, cmap=plt.cm.Blues, alpha=0.3)
for i in range(confmat.shape[0]):
    for j in range(confmat.shape[1]):
        ax.text(x=j, y=i, s=confmat[i, j], va='center', ha='center')

plt.xlabel('预测类标')
plt.ylabel('真实类标')
plt.show()

Python进行Logistic回归_第2张图片

# 获取模型的准确率和召回率
from sklearn.metrics import precision_score, recall_score, f1_score
# 准确率
print('Precision: %.4f' % precision_score(y_true=y_test, y_pred=y_pred))
# 召回率
print('Recall: %.4f' % recall_score(y_true=y_test, y_pred=y_pred))
# F1
print('F1: %.4f' % f1_score(y_true=y_test, y_pred=y_pred))
from sklearn.metrics import roc_curve, auc
from scipy import interp


# 设置图形大小
fig = plt.figure(figsize=(7, 5))

mean_tpr = 0.0
mean_fpr = np.linspace(0, 1, 100)
all_tpr = []
# 计算 预测率
probas = lr.fit(X_train, y_train).predict_proba(X_test)
# 计算 fpr,tpr    
fpr, tpr, thresholds = roc_curve(y_test, probas[:, 1], pos_label=1)
mean_tpr += interp(mean_fpr, fpr,  tpr)
mean_tpr[0] = 0.0
roc_auc = auc(fpr, tpr)
plt.plot(fpr, tpr, lw=1, label='ROC (area = %0.2f)' 
                    % ( roc_auc))
plt.plot([0, 1], [0, 1], linestyle='--', color=(0.6, 0.6, 0.6), label='random guessing')

mean_tpr /= len(X_train)
mean_tpr[-1] = 1.0
mean_auc = auc(mean_fpr, mean_tpr)
plt.plot([0, 0, 1], 
         [0, 1, 1], 
         lw=2, 
         linestyle=':', 
         color='black', 
         label='perfect performance')

plt.xlim([-0.05, 1.05])
plt.ylim([-0.05, 1.05])
plt.xlabel('假正率')
plt.ylabel('真正率')
plt.title('')
plt.legend(loc="lower right")
plt.show()

Python进行Logistic回归_第3张图片

你可能感兴趣的:(Python机器学习,机器学习-Logistic)