机器学习作业(二)逻辑回归——Python(numpy)实现
题目太长啦!文档下载【传送门】
第1题
简述:实现逻辑回归。
此处使用了minimize函数代替Matlab的fminunc函数,参考了该博客【传送门】。
import numpy as np
import matplotlib.pyplot as plt
import scipy.optimize as op #S函数
def sigmoid(z):
g = 1/(1+np.exp(-z))
return g #cost计算函数
def costFunction(theta, X, y):
theta = np.array(theta).reshape((np.size(theta),1))
m = np.size(y)
h = sigmoid(np.dot(X, theta))
J = 1/m*(-np.dot(y.T, np.log(h)) - np.dot((1-y.T), np.log(1-h)))
return J.flatten() def gradient(theta, X, y):
theta = np.array(theta).reshape((np.size(theta), 1))
m = np.size(y)
h = sigmoid(np.dot(X, theta))
grad = 1/m*np.dot(X.T, h - y)
return grad.flatten() #读取数据,第一列是成绩1,第二列是成绩2,第三列是yes/no
data = np.loadtxt('ex2data1.txt', delimiter=',', dtype='float')
m = np.size(data[:, 0])
# print(data) #绘制样本点
X = data[:, 0:2]
y = data[:, 2:3]
pos = np.where(y == 1)[0]
neg = np.where(y == 0)[0]
X1 = X[pos, 0:2]
X0 = X[neg, 0:2]
plt.plot(X1[:, 0], X1[:, 1], 'k+')
plt.plot(X0[:, 0], X0[:, 1], 'yo')
plt.xlabel('Exam 1 score')
plt.ylabel('Exam 2 score') #求解最优解
one = np.ones(m)
X = np.insert(X, 0, values=one, axis=1)
initial_theta = np.zeros(np.size(X, 1))
result = op.minimize(fun=costFunction, x0=initial_theta, args=(X, y), method='TNC', jac=gradient)
# print(result)
theta = result.x
cost = result.fun
print('theta:', theta)
print('cost:', cost) #绘制决策边界
plot_x = np.array([np.min(X[:, 1]), np.max(X[:, 2])])
# print(plot_x)
plot_y = (-1/theta[2])*(theta[1]*plot_x+theta[0])
# print(plot_y)
plt.plot(plot_x,plot_y)
plt.legend(labels=['Admitted', 'Not admitted'])
plt.axis([30, 100, 30, 100])
plt.show() #预测[45 85]成绩的学生,并计算准确率
theta = np.array(theta).reshape((np.size(theta),1))
z = np.dot([1, 45, 85], theta)
prob = sigmoid(z)
print('For a student with scores 45 and 85, we predict an admission probability of ', prob)
p = np.round(sigmoid(np.dot(X,theta)))
acc = np.mean(p==y)*100
print('Train Accuracy: ',acc,'%')
运行结果:


第2题
简述:通过正规化实现逻辑回归。
import numpy as np
import matplotlib.pyplot as plt
import scipy.optimize as op #S函数
def sigmoid(z):
g = 1/(1+np.exp(-z))
return g #cost计算函数
def costFunction(theta, X, y, lamb):
theta = np.array(theta).reshape((np.size(theta), 1))
m = np.size(y)
h = sigmoid(np.dot(X, theta))
J = 1/m*(-np.dot(y.T, np.log(h)) - np.dot((1-y.T), np.log(1-h)))
# 添加项
theta2 = theta[1:, 0]
Jadd = lamb/(2*m)*np.sum(theta2**2)
J = J + Jadd
return J.flatten() #求梯度
def gradient(theta, X, y, lamb):
theta = np.array(theta).reshape((np.size(theta), 1))
m = np.size(y)
h = sigmoid(np.dot(X, theta))
grad = 1/m*np.dot(X.T, h - y)
#添加项
theta[0,0] = 0
gradadd = lamb/m*theta
grad = grad + gradadd
return grad.flatten() #求特征矩阵
def mapFeature(X1, X2):
degree = 6
out = np.ones((np.size(X1),1))
for i in range(1, degree+1):
for j in range(0, i+1):
res = np.multiply(np.power(X1, i-j), np.power(X2, j))
out = np.insert(out, np.size(out[0, :]), values=res, axis=1)
return out #读取数据,第一列是成绩1,第二列是成绩2,第三列是yes/no
data = np.loadtxt('ex2data2.txt', delimiter=',', dtype='float')
m = np.size(data[:, 0]) #绘制样本点
X = data[:, 0:2]
y = data[:, 2:3]
pos = np.where(y == 1)[0]
neg = np.where(y == 0)[0]
X1 = X[pos, 0:2]
X0 = X[neg, 0:2]
plt.plot(X1[:, 0], X1[:, 1], 'k+')
plt.plot(X0[:, 0], X0[:, 1], 'yo')
plt.xlabel('Microchip Test 1')
plt.ylabel('Microchip Test 2')
plt.legend(labels=['y = 1', 'y = 0']) #数据初始化
X = mapFeature(X[:, 0], X[:, 1])
# print(X)
lamb = 1
initial_theta = np.zeros(np.size(X, 1)) #求解最优解
result = op.minimize(fun=costFunction, x0=initial_theta, args=(X, y, lamb), method='TNC', jac=gradient)
# print(result)
cost = result.fun
theta = result.x
print('theta:', theta)
print('cost:', cost) #绘制决策边界
u = np.linspace(-1, 1.5, 50)
v = np.linspace(-1, 1.5, 50)
z = np.zeros((np.size(u),np.size(v)))
theta = np.array(theta).reshape((np.size(theta), 1))
for i in range(0, np.size(u)):
for j in range(0, np.size(v)):
z[i, j] = np.dot(mapFeature(u[i], v[j]), theta)
# print(z)
plt.contour(u, v, z.T, [0])
plt.show() #计算准确率
p = np.round(sigmoid(np.dot(X,theta)))
acc = np.mean(p==y)*100
print('Train Accuracy: ',acc,'%')
运行结果:


机器学习作业(二)逻辑回归——Python(numpy)实现的更多相关文章
- 机器学习二 逻辑回归作业、逻辑回归(Logistic Regression)
机器学习二 逻辑回归作业 作业在这,http://speech.ee.ntu.edu.tw/~tlkagk/courses/ML_2016/Lecture/hw2.pdf 是区分spam的. 57 ...
- 机器学习总结之逻辑回归Logistic Regression
机器学习总结之逻辑回归Logistic Regression 逻辑回归logistic regression,虽然名字是回归,但是实际上它是处理分类问题的算法.简单的说回归问题和分类问题如下: 回归问 ...
- 机器学习算法整理(二)梯度下降求解逻辑回归 python实现
逻辑回归(Logistic regression) 以下均为自己看视频做的笔记,自用,侵删! 还参考了:http://www.ai-start.com/ml2014/ 用梯度下降求解逻辑回归 Logi ...
- scikit-learn机器学习(二)逻辑回归进行二分类(垃圾邮件分类),二分类性能指标,画ROC曲线,计算acc,recall,presicion,f1
数据来自UCI机器学习仓库中的垃圾信息数据集 数据可从http://archive.ics.uci.edu/ml/datasets/sms+spam+collection下载 转成csv载入数据 im ...
- Coursera-AndrewNg(吴恩达)机器学习笔记——第三周编程作业(逻辑回归)
一. 逻辑回归 1.背景:使用逻辑回归预测学生是否会被大学录取. 2.首先对数据进行可视化,代码如下: pos = find(y==); %找到通过学生的序号向量 neg = find(y==); % ...
- 【机器学习基础】逻辑回归——LogisticRegression
LR算法作为一种比较经典的分类算法,在实际应用和面试中经常受到青睐,虽然在理论方面不是特别复杂,但LR所牵涉的知识点还是比较多的,同时与概率生成模型.神经网络都有着一定的联系,本节就针对这一算法及其所 ...
- Stanford机器学习---第三讲. 逻辑回归和过拟合问题的解决 logistic Regression & Regularization
原文:http://blog.csdn.net/abcjennifer/article/details/7716281 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ...
- 机器学习入门11 - 逻辑回归 (Logistic Regression)
原文链接:https://developers.google.com/machine-learning/crash-course/logistic-regression/ 逻辑回归会生成一个介于 0 ...
- Spark机器学习(2):逻辑回归算法
逻辑回归本质上也是一种线性回归,和普通线性回归不同的是,普通线性回归特征到结果输出的是连续值,而逻辑回归增加了一个函数g(z),能够把连续值映射到0或者1. MLLib的逻辑回归类有两个:Logist ...
随机推荐
- Python爬虫beautifulsoup4常用的解析方法总结(新手必看)
今天小编就为大家分享一篇关于Python爬虫beautifulsoup4常用的解析方法总结,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧摘要 如何用beau ...
- clr via c# clr寄宿和AppDomain (一)
1 clr寄宿-----.net framework在windows平台的顶部允许.者意味着.net framework必须用windows能理解的技术来构建.所有托管模块和程序集文件必须使用wind ...
- 微信小程序入门笔记-使用云开发(4)
1.云数据库 一.介绍 云开发提供了一个 JSON 数据库,顾名思义,数据库中的每条记录都是一个 JSON 格式的对象.一个数据库可以有多个集合(相当于关系型数据中的表),集合可看做一个 JSON 数 ...
- Android中实现长按照片弹出右键菜单
场景 效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 将布局改为Lin ...
- mysql中EXPLAIN 的作用
(一)id列: (1).id 相同执行顺序由上到下 mysql> explain -> SELECT*FROM tb_order tb1 -> LEFT JOIN tb_produc ...
- 常见的MIME类型与00截断
常见的MIME类型 1)超文本标记语言.html文件的MIME类型为:text/html 2)普通文本.txt文件的MIME类型为:text/plain 3)PDF文档.pdf的MIME类型为:app ...
- .Net框架的模块代码生成器--其二(dotnet tool)
以下是个人工作场景,继上篇后,还剩下第3步骤没有解决 3.(这个可能我们公司才有)每个模型还要在每一层那里创建一个文件,这个模型的增删改查逻辑就在这里写 这个我是自己写一个.Net Core命令行工具 ...
- Binder 原理整理
linux进程间通信方式 1. 管道 管道的实质是一个内核缓冲区,管道的作用正如其名,需要通信的两个进程在管道的两端,进程利用管道传递信息.管道对于管道两端的进程而言,就是一个文件,但是这个文件比较特 ...
- java script 内置对象
java script 内置对象 Date 日期对象 字符串对象 定义字符串的方法就是直接赋值 使用 String 对象的 toUpperCase() 方法来将字符串小写字母转换为大写,反之 toLo ...
- Android实战项目——家庭记账本(三)
今天完成的主要内容有: 1.主页面账单明细部分细节展示 2.对每个列表项,点击打开新的可编辑修改具体页面 3.实现了搜索页面的UI布局 4.优化了部分页面的UI,提升用户视觉和使用体验 实现效果如下: ...