首页 > 编程语言 >实验二:逻辑回归算法实验

实验二:逻辑回归算法实验

时间:2022-11-06 19:57:22浏览次数:36  
标签:iris 逻辑 plt sigmoid 回归 算法 实验 np data

【实验目的】

理解逻辑回归算法原理,掌握逻辑回归算法框架;
理解逻辑回归的sigmoid函数;
理解逻辑回归的损失函数;
针对特定应用场景及数据,能应用逻辑回归算法解决实际分类问题。

【实验内容】

1.根据给定的数据集,编写python代码完成逻辑回归算法程序,实现如下功能:

建立一个逻辑回归模型来预测一个学生是否会被大学录取。假设您是大学部门的管理员,您想根据申请人的两次考试成绩来确定他们的入学机会。您有来自以前申请人的历史数据,可以用作逻辑回归的训练集。对于每个培训示例,都有申请人的两次考试成绩和录取决定。您的任务是建立一个分类模型,根据这两门考试的分数估计申请人被录取的概率。
算法步骤与要求:

(1)读取数据;(2)绘制数据观察数据分布情况;(3)编写sigmoid函数代码;(4)编写逻辑回归代价函数代码;(5)编写梯度函数代码;(6)编写寻找最优化参数代码(可使用scipy.opt.fmin_tnc()函数);(7)编写模型评估(预测)代码,输出预测准确率;(8)寻找决策边界,画出决策边界直线图。

2. 针对iris数据集,应用sklearn库的逻辑回归算法进行类别预测。

要求:

(1)使用seaborn库进行数据可视化;(2)将iri数据集分为训练集和测试集(两者比例为8:2)进行三分类训练和预测;(3)输出分类结果的混淆矩阵。

【实验报告要求】

对照实验内容,撰写实验过程、算法及测试结果;
代码规范化:命名规则、注释;
实验报告中需要显示并说明涉及的数学原理公式;
查阅文献,讨论逻辑回归算法的应用场景;

实验内容及结果

1.根据给定的数据集,编写python代码完成逻辑回归算法程序,实现如下功能:

 (1)读取数据

import pandas as pd
data=pd.read_table("D:/data/ex2data1.txt",sep = ",",header=None)
data.columns=['exam1','exam2','isTF']
data

 

 

 (2)绘制数据观察数据分布情况

 

import matplotlib.pyplot as plt
dataT=data[data['isTF'].isin([1])]
dataF=data[data['isTF'].isin([0])]
plt.scatter(dataT['exam1'],dataT['exam2'])
plt.scatter(dataF['exam1'],dataF['exam2'])
plt.show()

 

 

(3)编写sigmoid函数代码

 

def sigmoid(z):
return 1 / (1 + np.exp(-z))
nums = np.arange(-10, 10, step=1)

fig, ax = plt.subplots(figsize=(12,8))
ax.plot(nums, sigmoid(nums), 'r')
plt.show()

 

 

 

(4)编写逻辑回归代价函数代码  

data.insert(0, 'ones',1)
xi=np.array(data.iloc[:,0:3])   #exam1列和exam2列的数据转换为数组
yi=np.array(data.iloc[:,3:4])   #isTF列的数据转换为数组
wi=np.zeros(3)                  
def f_cost(w,x,y):
    w=np.matrix(w)            #wi转换为矩阵
    z=f_sigmoid(np.dot(x,(w.T))) #调用sigmoid函数,dot函数计算两个矩阵内积
    Lw=np.sum(np.multiply(y,(-np.log(z)))+np.multiply((1-y),(-np.log(1-z))))/len(x)   #代价函数
    return Lw
f_cost(wi,xi,yi)

(5)编写梯度函数代码

def tidu(w,x,y):
    w=np.matrix(w)
    z=f_sigmoid(np.dot(x,(w.T)))
    WL=np.dot(((z-y).T),x)/len(x)
    return np.array(WL).flatten()
tidu(wi,xi,yi)

 

(6)编写寻找最优化参数代码(可使用scipy.opt.fmin_tnc()函数)

from scipy import optimize
result = optimize.fmin_tnc(func=f_cost, x0=wi, fprime=tidu, args=(xi, yi))
wi=result[0]
print(result)

 

 

 (7)编写模型评估(预测)代码,输出预测准确率

 

def predict(w,x):
    w=np.matrix(w)
    z=f_sigmoid(x*(w.T))
    return [1 if i >= 0.5 else 0 for i in z]        #通过sigmoid函数值预测结果>=0.5为1,否则为0
predictValues=predict(wi,xi)
hypothesis=[1 if a==b else 0 for (a,b)in zip(predictValues,yi)]         #用预测值与实际值进行比较,相等为1,否则为0
accuracy=hypothesis.count(1)/len(hypothesis)
accuracy

 

 

 (8)寻找决策边界,画出决策边界直线图

x1=np.linspace(30,100,100)
def boundary(X,w):
    return [(-w[0]-w[1]*i)/w[2] for i in x1]
x2=boundary(x1,wi)
plt.scatter(dataT['exam1'],dataT['exam2'])
plt.scatter(dataF['exam1'],dataF['exam2'])
plt.plot(x1,x2,color='r')
plt.show()

 

 

2. 针对iris数据集,应用sklearn库的逻辑回归算法进行类别预测

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_iris
data = load_iris() 
iris_target = data.target  
iris_features = pd.DataFrame(
    data=data.data, columns=data.feature_names)  
# 合并标签和特征信息
iris_all = iris_features.copy()  
iris_all['target'] = iris_target
# 特征与标签组合的散点可视化
sns.pairplot(data=iris_all, diag_kind='hist', hue='target')
plt.show()

 

 

 

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
# 将训练集测试集按照8:2比例划分
X_train, X_test, y_train, y_test = train_test_split(
    iris_features, iris_target, test_size=0.2, random_state=2020)
clf = LogisticRegression(random_state=0, solver='lbfgs')
clf.fit(X_train, y_train)
print('逻辑回归的权重:\n', clf.coef_) 
print('逻辑回归的截距(w0)\n', clf.intercept_,'\n')  # 查看偏置
train_predict = clf.predict(X_train)
test_predict = clf.predict(X_test)
print(train_predict,'\n\n', test_predict)

from sklearn import metrics
print('逻辑回归准确度:',
      metrics.accuracy_score(y_train, train_predict))
print('逻辑回归准确度:',
      metrics.accuracy_score(y_test, test_predict))
# 查看混淆矩阵
confusion_matrix_result = metrics.confusion_matrix(y_test, test_predict)
print('混淆矩阵结果:\n', confusion_matrix_result)
plt.figure(figsize=(8, 6))
sns.heatmap(confusion_matrix_result, annot=True, cmap='Greens')
plt.xlabel('Predictedlabels')
plt.ylabel('Truelabels')
plt.show()

 

实验小结:

逻辑回归的一般过程

收集数据:采用任意方法收集数据
准备数据:由于需要进行距离计算,因此要求数据类型为数值型。另外,结构化数据格式则为最佳
分析数据:采用任意方法对数据进行分析
训练算法:大部分时间将用于训练,训练的目的是为了找到最佳的分类回归系数
测试算法:一旦训练步骤完成,分类将会很快
使用算法:首先,我们需要输入一些数据并将其转换成对应的结构化数值,接着,基于训练好的回归系数就可以对这些进行简单的回归计算,

判定它们属于哪个类别;在这那之后,我们就可以在输出的类别上做一些其他分析工作

1.sigmoid函数

sigmoid的优点在于输出范围有限,所以数据在传递的过程中不容易发散。 当然也有相应的缺点,就是饱和的时候梯度太小。

sigmoid还有一个优点是输出范围为 (0, 1),所以可以用作输出层,输出表示概率

 

 

 2.代价函数

3.梯度下降

 

 4.策略边界函数

 

 

 

逻辑回归应用场景

 逻辑回归的应用场景有数据挖掘,疾病自动诊断,经济预测等领域

 

 

标签:iris,逻辑,plt,sigmoid,回归,算法,实验,np,data
From: https://www.cnblogs.com/xiaogaoa/p/16863579.html

相关文章

  • 实验7:基于REST API的SDN北向应用实践
    一、实验目的1.能够编写程序调用OpenDaylightRESTAPI实现特定网络功能;2.能够编写程序调用RyuRESTAPI实现特定网络功能。二、实验环境1.下载虚拟机软件OracleVisua......
  • 实验7:基于REST API的SDN北向应用实践
    一、实验目的1.能够编写程序调用OpenDaylightRESTAPI实现特定网络功能;2.能够编写程序调用RyuRESTAPI实现特定网络功能。二、实验环境1.下载虚拟机软件OracleVisua......
  • 实验6:开源控制器实践——RYU
    一、实验要求(一)基本要求1.搭建下图所示SDN拓扑,协议使用OpenFlow1.0,并连接Ryu控制器,通过Ryu的图形界面查看网络拓扑。查看网络拓扑2.阅读Ryu文档的TheFirstApplic......
  • 实验2:Open vSwitch虚拟交换机实践
    实验2:OpenvSwitch虚拟交换机实践一、实验目的能够对OpenvSwitch进行基本操作;能够通过命令行终端使用OVS命令操作OpenvSwitch交换机,管理流表;能够通过Mininet的Pytho......
  • 实验3:OpenFlow协议分析实践
    实验3:OpenFlow协议分析实践一、实验目的能够运用wireshark对OpenFlow协议数据交互过程进行抓包;能够借助包解析工具,分析与解释OpenFlow协议的数据包交互过程与机制......
  • 实验4:开源控制器实践——OpenDaylight
    实验4:开源控制器实践——OpenDaylight一、实验目的能够独立完成OpenDaylight控制器的安装配置;能够使用Postman工具调用OpenDaylightAPI接口下发流表。二、实验环境Ubu......
  • 实验7:基于REST API的SDN北向应用实践
    一、实验目的能够编写程序调用OpenDaylightRESTAPI实现特定网络功能;能够编写程序调用RyuRESTAPI实现特定网络功能。二、实验环境下载虚拟机软件OracleVisualBox或......
  • 实验4 类与数组、指针
    实验5:#include<iostream>usingstd::cout;usingstd::endl;usingstd::cin;classvectorInt{public:vectorInt(intn);vectorInt(intn,intm);~......
  • 实验环境配置
    一、实验目的熟悉实验环境熟悉Linux基本操作二、实验要求(一)任务请根据实验环境安装文档,完成特定开源软件的安装(二)实验报告请用Markdown排版,提交在博客园班级作......
  • 实验6:开源控制器实践——RYU
    实验6:开源控制器实践——RYU一、实验目的能够独立部署RYU控制器;能够理解RYU控制器实现软件定义的集线器原理;能够理解RYU控制器实现软件定义的交换机原理。二、实验环境......