Logistic回归的sklearn实现

文章目录

1.导入必要的模块
2.生成数据
3.模型搭建
4.模型训练
5.模型预测
6.logistic回归模型
7.画出预测曲线
8.计算评价指标accuracy

正文内容:

1.导入必要的模块

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

2.生成数据

2.1定义数据生成函数
def create_data(data_num=100):
    np.random.seed(21)
    x1=np.random.normal(1,0.2,data_num)
    x2=np.random.normal(2,0.2,data_num)
    x=np.append(x1,x2)
    y=np.array([0]*data_num+[1]*data_num)
    return x,y
2.2生成数据
X,y=create_data(1000)
X #查看X的数据
array([0.98960715, 0.97776079, 1.20835936, ..., 1.84049108, 2.14936146,
       1.90338769])
y #查看y的数据
array([0, 0, 0, ..., 1, 1, 1])
2.3划分训练集和测试集
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(
    X,y,test_size=0.3,random_state=16)
2.4画出训练集数据散点图
plt.scatter(X_train,y_train,color='blue',s=20)
plt.show()

训练集散点图

2.5画出测试集数据散点图
plt.scatter(X_test,y_test,color='g',s=20)
plt.show()

测试集数据散点图

3.模型搭建

from sklearn.linear_model import LogisticRegression
model=LogisticRegression()

4.模型训练

  • 线性回归模型训练 sklearn.linear_model.LogisticRegression.fit
  • 用到的参数:
    —X:输入特征,如果输入是np.array格式,shape必须是(n_sample,n_feature)。
    —Y:输入标签。
X_train=X_train.reshape(-1,1)
model.fit(X=X_train,y=y_train)
LogisticRegression() #上述两行代码运行的输出

5.模型预测

  • 对测试集做预测
  • 线性回归预测模型:sklearn.linear_model.LogisticRegression.predict
  • 用到的参数:
    —X:输入特征,如果输入是np.array格式,shape必须是(n_sample,n_feature)。
    —C:预测结果。
X_test=X_test.reshape(-1,1)
y_test_pred=model.predict(X=X_test)# 默认阀值为0.5
y_test_pred_proba=model.predict_proba(X=X_test) # 可以自定义阀值,比如自定义阀值0.6
取阀值判断概率的二分类结果
def thes_func(x):
    thes=0.6
    return 1 if x>thes else 0
y_test_pred_thes=list(map(thes_func,y_test_pred_proba[:,1]))

6.查看Logistic回归模型的系数w和截距b

  • 回归系数:sklearn.linear_model.LogisticRegression.coef_
  • 截距项:sklearn.linear_model.LogisticRegression.intercep_
w,b=model.coef_[0],model.intercept_
print('Weight={0}bias={1}'.format(w,b))
Weight=[9.53805539]bias=[-14.3705638]# print的输出结果

7.画出预测曲线

  • scipy.special.expit函数,也称为logistic sigmoid函数,定义:expit(x)=1/(1+e-x)
  • 参数:
    –x:sigmoid函数的输入,输入要求是np.array数组格式。
    –out:sigmoid函数的输出,以np.array数组的格式返回,形状与输入x相同。
from scipy.special import expit
X_train=X_train.reshape(-1)
X_test=X_test.reshape(-1)
sigmoid=expit(np.sort(X_test)*model.coef_[0]+model.intercept_)
plt.plot(np.sort(X_test),sigmoid,color='g')
plt.scatter(X_test,y_test,color='r',label='test dataset')
plt.legend()
plt.show()

在这里插入图片描述

8.计算评价指标Accuracy

  • 均方误差:sklearn.metrics.accuracy_score
  • 用到的参数:
    —y_true:真实值(ground_truth)
    —y_pred:预测值。
    返回:
    –loss:accuracy计算结果。
from sklearn.metrics import accuracy_score
acc=accuracy_score(y_true=y_test,y_pred=y_test_pred)
print('Accuracy:{}'.format(acc))
Accuracy:0.9916666666666667 # print输出的结果

猜你喜欢

转载自blog.csdn.net/weixin_42961082/article/details/113805473