逻辑回归-成绩预测

# 绘制散点图
import matplotlib.pyplot as plt

# 数据集拆分

'''
第一步:建立数据集
'''
from collections import OrderedDict
import pandas as pd

# 数据集
examDict = {
    '学习时间': [0.50, 0.75, 1.00, 1.25, 1.50, 1.75, 1.75, 2.00, 2.25, 2.50,
             2.75, 3.00, 3.25, 3.50, 4.00, 4.25, 4.50, 4.75, 5.00, 5.50],
    '通过考试': [0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1]  # 结果为是否通过考试,标签为0,1
}
examOrderDict = OrderedDict(examDict)  # 使数据集有序
examDf = pd.DataFrame(examOrderDict)  # 将字典转为DataFrame

'''
第二步:提取特征和标签
'''
# exam_X:(0,0.5) (1,0.75) (2,1.0) (3, 1.25) (4,1.5) (5, 1.75) (6, 1.75)...
# exam_y:(0, 0) (1, 0) (2, 0) (3, 0) (4, 0) (5, 0) (6, 1)...
exam_X = examDf.loc[:, '学习时间']  # 特征features——学习时间
exam_y = examDf.loc[:, '通过考试']  # 标签labes——是否通过考试:0为未通过考试,1为通过考试

'''
第三步:绘制散点图
'''
# plt.scatter(exam_X, exam_y, color="b", label="exam data")  # 散点图
# plt.xlabel("Hours")  # 添加横轴标签
# plt.ylabel("Pass")  # 添加纵轴标签
# # plt.show()  # 显示图像

'''
第四步:建立模型训练数据集和测试数据集
'''
from sklearn.model_selection import train_test_split  # train_test_split:随机从数据集中按笔记划分训练标签和测试标签

X_train, X_test, y_train, y_test = train_test_split(exam_X,
                                                    exam_y,
                                                    train_size=.6)  # 拆分的比例,训练数据 80% 测试数据20%

# plt.scatter(X_train, y_train, color="blue", label="train data")  # 绘制训练集散点图
# plt.scatter(X_test, y_test, color="red", label="test data")  # 绘制测试集散点图
# plt.legend(loc='center left')
# plt.xlabel("Hours")  # 添加横轴标签
# plt.ylabel("Pass")  # 添加纵轴标签
# # plt.show()  # 显示图像

'''
第五步:训练模型
'''
X_train = X_train.values.reshape(-1, 1)  # 将训练数据特征转换成二维数组XX行*1列
X_test = X_test.values.reshape(-1, 1)  # 将测试数据特征转换成二维数组行数*1列

from sklearn.linear_model import LogisticRegression  # step1:导入逻辑回归包

model = LogisticRegression()  # step2 创建模型:逻辑回归
model.fit(X_train, y_train)  # step3:训练模型

'''
第六步:评估模型准确率
'''
correction = model.score(X_test, y_test)  # X_test:测试数据特征;y_test:测试数据标签
print("模型的正确率为:", correction)

'''
第七步:预测是否通过考试的概率;预测是否可以通过考试
'''
time = 0  # 学习时间
failOrPass = model.predict_proba([[time]])  # 第1个值是标签为0的概率值,第2个值是标签为1的概率值
print("考试失败的概率是:", failOrPass[0, 0], ";考试成功的概率是:", failOrPass[0, 1])

pred = model.predict([[time]])
print("是否可以通过考试:", pred[0])

你可能感兴趣的:(逻辑回归,算法,机器学习)