一、知识结构

分类问题和逻辑回归?

1)输出数据的类型
分类输出的数据类型是离散数据,也就是分类的标签。 回归输出的是连续数据类型。
2)第2个区别是我们想要通过机器学习算法得到什么? 分类算法得到是一个决策面,用于对数据集中的数据进行分类。 回归算法得到是一个最优拟合线,这个线条可以最好的接近数据集中的各个点。
3
)第3个区别是对模型的评估指标不一样 在监督分类中,我们我们通常会使用正确率作为为指标,也就是预测结果中分类正确数据占总数据的比例 在回归中,我们用决定系数R平方来评估模型的好坏。R平方表示有多少百分比的y波动被回归线描述。

 

用python实现逻辑回归

 1、机器学习的步骤

 

 

 

 2、提出问题

分析学习时间与考试通过的关系(属于分类问题)

 3、理解数据

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression
from collections import OrderedDict

3.1 获取数据源 本次数据源为自定义数据

data={
    '学习时间':[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]
}

3.2将字典转化为排序字典

order_data=OrderedDict(data)
df=pd.DataFrame(order_data)

3.3查看数据集信息

df.info()

 

 

  df.head()

 

 自定义数据集共有两个字段,学习时间和分数,共20条数据

4、清洗数据

数据自定义且格式正确

5、构建模型

5.1绘制散点图

# 提取特征值
exam_x = df.loc[:,'学习时间']
exam_y = df.loc[:,'通过考试']
plt.scatter(exam_x,exam_y,color='r',label='exam_score')
# 添加坐标标签
plt.xlabel('hours')
plt.ylabel('pass')
#显示图像
plt.show()

5.2建立训练数据集和测试数据集

 分割数据,将数据随机分成训练数据(80%)和测试数据(20%)

from sklearn.model_selection import train_test_split

x_train , x_test , y_train , y_test = train_test_split(exam_x ,
                                                       exam_y,
                                                       train_size = 0.8)
#输出数据大小
print('原始数据特征:',exam_x.shape ,
      ',训练数据特征:', x_train.shape , 
      ',测试数据特征:',x_test.shape )
print('原始数据标签:',exam_y.shape ,
      '训练数据标签:', y_train.shape ,
      '测试数据标签:' ,y_test.shape)

5.3选择机器学习算法:

导入算法
    逻辑回归(logisic regression)
        随机森林(Random Forests Model)
    支持向量机(Support Vector Machines)
    Gradient Boosting Classifier
    K-nearest neighbors
    Gaussian Naive Bayes
    数据降维:PCA,Isomap
    数据分类:SVC,K-Means
    线性回归:LinearRegression
    创建模型
        model=LinearRegression()
    训练模型
        model.fit(train_X , train_y )
逻辑回归(logisic regression)

5.4训练模型

 # - - - - -- - - -训练模型(使用训练数据) - - - - -- - - -

x_train=x_train.values.reshape(-1,1)
x_test=x_test.values.reshape(-1,1)
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(x_train , y_train)

6、模型评估

model.score(x_test , y_test) #评估模型:准确率 

正确率为0.75,正确率较好

6.1绘图

# 绘图
import matplotlib.pyplot as plt              
# 训练数据散点图
plt.scatter(x_train, y_train, color='blue', label="train data")   
# 测试数据散点图
plt.scatter(x_test,y_test,color='r',label='test data')
#  训练数据的预测值
y_train_pred = model.predict(x_train)      

plt.scatter(x_train,y_train_pred,color='black',label='predict data')
#  绘制最佳拟合
#plt.plot(x_train, y_train_pred, color='black', label="best line")  

# 添加图标标签
plt.legend(loc=2)                                                  
plt.xlabel("Hours")
plt.ylabel("Pass")
plt.show() 

理解逻辑函数:

通过回归方程(截距、回归系数与特征值x)求得y值

 

 当g(z)值大于0.5

#理解逻辑回归函数
#斜率slope
#截距intercept

#第1步:得到回归方程的z值
#回归方程:z=𝑎+𝑏x
a=model.intercept_   #截距
b=model.coef_    #回归系数
x=3
z=a+b*x

#第2步:将z值带入逻辑回归函数中,得到概率值

y_pred=1/(1+np.exp(-z))
print('预测的概率值:',y_pred)

predict_proba:获取概率值
第1个值是标签为0的概率值,第2个值是标签为1的概率值

model.predict_proba([[3]])

#predict:返回y值
model.predict([[3]])

 

 

7.总结

1、研究问题:学习时间和成绩的关系?

2、数据来源:自定义数据源共20条数据

3、特征值和标签分别为:学习时间和通过考试

(特征是做出某个判断的证据,标签是结论)

(机器学习主要的工作就是提取出有用的特征,构造从特征到标签的映射)

6、评估模型:正确率为0.75,正确率较好

结论:学习时间越长考试通过率的概率越大。

 

 

 

 

 

 

 

posted on 2019-12-12 22:07  foremost  阅读(427)  评论(0编辑  收藏  举报