吴恩达机器学习课后题-02逻辑回归

2024-08-22 04:44

本文主要是介绍吴恩达机器学习课后题-02逻辑回归,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

逻辑回归

  • 逻辑回归基本知识点:分类
    • Cost function(代价函数)
    • 梯度下降
  • 题目
    • 线性可分
      • 散点图
      • 决策边界
    • 线性不可分
      • 题目
      • 特征映射
      • 代价函数(损失函数)
      • 梯度下降
      • 结果

逻辑回归基本知识点:分类

在这里插入图片描述

在这里插入图片描述

Cost function(代价函数)

在这里插入图片描述

在这里插入图片描述

梯度下降

在这里插入图片描述

题目

线性可分

在这里插入图片描述

散点图

#线性可分
import numpy as np
import pandas as pd
import matplotlib.pyplot as pltdata=pd.read_csv("E:/学习/研究生阶段/python-learning/吴恩达机器学习课后作业/code/ex2-logistic regression/ex2data1.txt",names=["Exam1","Exam2","Accepted"])
# print(data)
data.insert(0,"ones",1)
x=data.iloc[:,0:-1]#取数据的0-倒数第二列,取所有行
y=data.iloc[:,-1:]
x=x.values
y=y.values
# print(x,y)
fig,ax=plt.subplots()
ax.scatter(data[data["Accepted"]==0]["Exam1"],data[data["Accepted"]==0]["Exam2"],c="r",marker="x",label="y=0")
ax.scatter(data[data["Accepted"]==1]["Exam1"],data[data["Accepted"]==1]["Exam2"],c="g",marker="o",label="y=1")
ax.legend()
ax.set(xlabel="Exam1",ylabel="Exam2")
plt.show()

在这里插入图片描述

决策边界

在这里插入图片描述

#线性可分
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt"""
原始数据处理函数"""
def get_x_y(data):data.insert(0, "ones", 1)x = data.iloc[:, 0:-1]  # 取数据的0-倒数第二列,取所有行y = data.iloc[:, -1:]x = x.valuesy = y.valuesreturn x,y
def sigmoid(z):return 1/(1+np.exp(-z))def cost_function(x,y,theta):y_=sigmoid(x @ theta)return np.sum(-(y*np.log(y_)+(1-y)*np.log(1-y_))/len(x))"""
定义梯度下降函数
alpha:学习速率
inters:迭代次数
"""
def gradientDescent(x,y,theta,alpha,inters):costs = []for i in range(inters):theta=theta-alpha*x.T @ (sigmoid(x @ theta)-y)/len(x)cost=cost_function(x,y,theta)costs.append(cost)if i%1000==0:print(cost)return theta,costsdef predict(X,theta):prob = sigmoid(X@theta)return [1 if x >= 0.5 else 0 for x in prob]data=pd.read_csv("E:/学习/研究生阶段/python-learning/吴恩达机器学习课后作业/code/ex2-logistic regression/ex2data1.txt",names=["Exam1","Exam2","Accepted"])
# print(data)
x,y=get_x_y(data)
print(x)
theta=np.zeros((x.shape[1],1))#theta初始值x.shape[1] x 1零矩阵
alpha=0.004#学习速率初始化
inters=200000#迭代次数初始化
print(x.shape[1])
"""
预测
"""
theta,costs=gradientDescent(x,y,theta,alpha,inters)
print(theta)
y_ = np.array(predict(x,theta))
y_pre = y_.reshape(len(y_),1)
acc = np.mean(y_pre==y)#acc准确率
print(acc)fig,ax=plt.subplots()
ax.scatter(data[data["Accepted"]==0]["Exam1"],data[data["Accepted"]==0]["Exam2"],c="r",marker="x",label="y=0")
ax.scatter(data[data["Accepted"]==1]["Exam1"],data[data["Accepted"]==1]["Exam2"],c="g",marker="o",label="y=1")x_x1=x[:,1].reshape(len(x),1)y_x2=-(theta[0,0]/theta[2,0])-(theta[1,0]/theta[2,0])*x_x1ax.plot(x_x1,y_x2,"r",label="jiexian")ax.legend()
ax.set(xlabel="Exam1",ylabel="Exam2")plt.show()

在这里插入图片描述

线性不可分

在这里插入图片描述
特征映射
在这里插入图片描述

题目

在这里插入图片描述

import numpy as np
import pandas as pd
import matplotlib.pyplot as pltdata=pd.read_csv("E:/学习/研究生阶段/python-learning/吴恩达机器学习课后作业/code/ex2-logistic regression/ex2data2.txt",names=["Test1","Test2","Accepted"])fig,ax=plt.subplots()
ax.scatter(data[data["Accepted"]==0]["Test1"],data[data["Accepted"]==0]["Test2"],c="r",marker="x",label="y=0")
ax.scatter(data[data["Accepted"]==1]["Test1"],data[data["Accepted"]==1]["Test2"],c="g",marker="o",label="y=1")ax.legend()
ax.set(xlabel="Test1",ylabel="Test2")
plt.show()

在这里插入图片描述

特征映射

def feature_mapping(x1,x2,power):data_dirc={}for i in np.arange(power + 1):for j in np.arange(i + 1):data_dirc['F{}{}'.format(i-j, j)] = np.power(x1, i - j) * np.power(x2, j)return pd.DataFrame(data_dirc)

代码解释

这段代码定义了一个名为 feature_mapping 的函数,它接收三个参数:x1 和 x2(这两个参数通常是数值型数据,比如两个特征变量),以及 power(一个整数,表示幂次的上限)。函数的目的是根据输入的 x1 和 x2,以及指定的 power,生成一个新的特征映射(feature mapping)数据集,并以 pandas.DataFrame 的形式返回。在特征映射过程中,函数通过嵌套循环遍历所有可能的幂次组合,其中 i 的范围从 0 到 power(包含),而 j 的范围从 0 到 i(包含)。对于每一对 (i, j),它计算 x1 的 (i-j) 次幂与 x2 的 j 次幂的乘积,并将这个乘积作为新特征的值。新特征的名称由 'F{}{}' 格式化字符串生成,其中第一个 {} 填入 (i-j),第二个 {} 填入 j。然而,代码中存在一个潜在的问题:它没有导入 numpy 和 pandas 库,这两个库在代码中被使用。为了使代码正常工作,你需要在代码的开始处添加以下导入语句:python
import numpy as np  
import pandas as pd
完整的函数代码应该如下所示:python
import numpy as np  
import pandas as pd  def feature_mapping(x1, x2, power):  data_dirc = {}  for i in np.arange(power + 1):  for j in np.arange(i + 1):  data_dirc['F{}{}'.format(i-j, j)] = np.power(x1, i - j) * np.power(x2, j)  return pd.DataFrame(data_dirc)  # 示例用法  
x1 = 2  
x2 = 3  
power = 2  
result = feature_mapping(x1, x2, power)  
print(result)
这个示例中,x1 设置为 2,x2 设置为 3,power 设置为 2。因此,函数会生成包含以下特征的数据框:F00(x1^0 * x2^0)
F10(x1^1 * x2^0)
F11(x1^1 * x2^1)
F20(x1^2 * x2^0)
F21(x1^2 * x2^1)
这些特征对应于 x1 和 x2 的不同幂次组合,可用于机器学习模型中以增加模型的非线性。

代价函数(损失函数)

在这里插入图片描述

def sigmoid(z):return 1/(1+np.exp(-z))def cost_function(x,y,theta,lr):y_=sigmoid(x @ theta)reg=np.sum(np.power(theta[1:]),2)*(lr/(2*len(x)))#正则化return np.sum(-(y*np.log(y_)+(1-y)*np.log(1-y_))/len(x))+reg

梯度下降

在这里插入图片描述


"""
定义梯度下降函数
alpha:学习速率
inters:迭代次数
lamda
"""
def gradientDescent(x,y,theta,alpha,inters,lamda):costs = []for i in range(inters):reg = theta[1:] * (lamda / len(x))  #reg = np.insert(reg, 0, values=0, axis=0) #在第一个元素前插入0,为了与后面维数匹配theta=theta-alpha*x.T @ (sigmoid(x @ theta)-y)/len(x)cost=cost_function(x,y,theta,lamda)costs.append(cost)# if i%1000==0:#     print(cost)return theta,costs
"""
准确率预测
"""
def predict(X,theta):prob = sigmoid(X@theta)return [1 if x >= 0.5 else 0 for x in prob]

结果

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt"""
原始数据处理函数"""
def get_x_y(data):data.insert(0, "ones", 1)x = data.iloc[:, 0:-1]  # 取数据的0-倒数第二列,取所有行y = data.iloc[:, -1:]x = x.valuesy = y.valuesreturn x,y"""
特征映射"""
def feature_mapping(x1,x2,power):data_dirc={}for i in np.arange(power + 1):for j in np.arange(i + 1):data_dirc['F{}{}'.format(i-j, j)] = np.power(x1, i - j) * np.power(x2, j)return pd.DataFrame(data_dirc)"""
代价函数
"""
def sigmoid(z):return 1/(1+np.exp(-z))def cost_function(x,y,theta,lamda):y_=sigmoid(x @ theta)reg=np.sum(np.power(theta[1:],2))*(lamda/(2*len(x)))#正则化return np.sum(-(y*np.log(y_)+(1-y)*np.log(1-y_))/len(x))+reg"""
定义梯度下降函数
alpha:学习速率
inters:迭代次数
lamda
"""
def gradientDescent(x,y,theta,alpha,inters,lamda):costs = []for i in range(inters):reg = theta[1:] * (lamda / len(x))  #reg = np.insert(reg, 0, values=0, axis=0) #在第一个元素前插入0,为了与后面维数匹配theta=theta-alpha*x.T @ (sigmoid(x @ theta)-y)/len(x)cost=cost_function(x,y,theta,lamda)costs.append(cost)# if i%1000==0:#     print(cost)return theta,costs
"""
准确率预测
"""
def predict(X,theta):prob = sigmoid(X@theta)return [1 if x >= 0.5 else 0 for x in prob]data=pd.read_csv("E:/学习/研究生阶段/python-learning/吴恩达机器学习课后作业/code/ex2-logistic regression/ex2data2.txt",names=["Test1","Test2","Accepted"])
# # fig,ax=plt.subplots()
# # ax.scatter(data[data["Accepted"]==0]["Test1"],data[data["Accepted"]==0]["Test2"],c="r",marker="x",label="y=0")
# # ax.scatter(data[data["Accepted"]==1]["Test1"],data[data["Accepted"]==1]["Test2"],c="g",marker="o",label="y=1")
# # ax.legend()
# # ax.set(xlabel="Test1",ylabel="Test2")
# # plt.show()
x1=data["Test1"]
x2=data["Test2"]
power=6
data_=feature_mapping(x1,x2,power)
x=data_.values
y = data.iloc[:, -1:].values
theta=np.zeros((x.shape [1],1))#theta初始值x.shape[1] x 1零矩阵
lamda=0.001
alpha=0.001#学习速率初始化
inters=200000#迭代次数初始化
# cost_init=cost_function(x,y,theta, lamda)
# print(cost_init)
theta,costs=gradientDescent(x,y,theta,alpha,inters,lamda)
print(theta)y_ = np.array(predict(x,theta))
y_pre = y_.reshape(len(y_),1)
acc = np.mean(y_pre==y)#acc准确率
print(acc)fig,ax=plt.subplots()
ax.scatter(data[data["Accepted"]==0]["Test1"],data[data["Accepted"]==0]["Test2"],c="r",marker="x",label="y=0")
ax.scatter(data[data["Accepted"]==1]["Test1"],data[data["Accepted"]==1]["Test2"],c="g",marker="o",label="y=1")
ax.legend()
ax.set(xlabel="Test1",ylabel="Test2")x_plot= np.linspace(-1.2,1.2,200)
xx,yy = np.meshgrid(x_plot,x_plot)
z = feature_mapping(xx.ravel(),yy.ravel(),power).values
zz=z @ theta
zz=zz.reshape(xx.shape)
plt.contour(xx,yy,zz,0)plt.show()

在这里插入图片描述

这篇关于吴恩达机器学习课后题-02逻辑回归的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095275

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件