博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Coursera机器学习编程作业Python实现(Andrew Ng)—— 2.1 Logistic Regression
阅读量:6808 次
发布时间:2019-06-26

本文共 2503 字,大约阅读时间需要 8 分钟。

2.1 Logistic Regression

import numpy as npimport pandas as pdimport matplotlib.pyplot as plt import math

数据读取

data1 = pd.read_csv('ex2data1.txt', header=None, names=['Exam 1 score', 'Exam 2 score', 'Admission'])
_, ax = plt.subplots(figsize=(10,6))data1[data1['Admission']==0].plot(x='Exam 1 score', y='Exam 2 score', kind='scatter', c='red', marker='o', ax=ax, label='Not admitted') data1[data1['Admission']==1].plot(x='Exam 1 score', y='Exam 2 score', kind='scatter', c='blue',marker='x', ax=ax, label='Admitted') plt.show()

数据预处理

data1.insert(0, 'ones', 1) X = data1.values[:,:-1] y = data1.values[:,-1] theta = np.zeros(X.shape[1]

定义sigmoid函数

def sigmoid(x):    return 1 / (1 + np.exp(-x))

定义代价函数

def costFunction(theta, X, y):    return np.mean(- y * np.log(sigmoid(np.dot(X, theta))) - (1 - y) * np.log(1 - sigmoid(np.dot(X, theta))))
costFunction(theta, X, y)
0.6931471805599453

定义梯度下降函数

def gradient(theta, X, y):    return (1/X.shape[0]) * np.dot(X.T, sigmoid(np.dot(X, theta)) - y)
gradient(theta, X, y)
array([ -0.1       , -12.00921659, -11.26284221])

构造优化器求解

import scipy.optimize as optres = opt.minimize(fun=costFunction, x0=theta, args=(X, y), jac=gradient, method='Newton-CG') res
fun: 0.20349771251305832     jac: array([1.68639010e-05, 9.03344162e-04, 8.76022414e-04]) message: 'Optimization terminated successfully.'    nfev: 71    nhev: 0     nit: 28    njev: 240  status: 0 success: True       x: array([-25.1527642 ,   0.20616308,   0.20140236])
theta_result = res.x

验证

sigmoid(np.dot(np.array([1, 45, 85]), theta_result))
0.776220348464748
def predict(X, theta):    return (sigmoid(np.dot(X, theta)) >= 0.5).astype(int) y_pred = predict(X, theta_result) from sklearn.metrics import classification_report print(classification_report(y, y_pred))
precision    recall  f1-score   support        0.0       0.87      0.85      0.86        40        1.0       0.90      0.92      0.91        60avg / total       0.89      0.89      0.89       100
x = [X[:,1].min(), X[:,1].max()]y = [-(theta_result[0]+theta_result[1]*x[0])/theta_result[2],-(theta_result[0]+theta_result[1]*x[1])/theta_result[2]]_, ax = plt.subplots(figsize=(10,6))data1[data1['Admission']==0].plot(x='Exam 1 score', y='Exam 2 score', kind='scatter', c='red', marker='o', ax=ax, label='Not admitted') data1[data1['Admission']==1].plot(x='Exam 1 score', y='Exam 2 score', kind='scatter', c='blue',marker='x', ax=ax, label='Admitted') ax.plot(x, y) plt.show()

转载于:https://www.cnblogs.com/shouzhenghouchuqi/p/10586096.html

你可能感兴趣的文章
zabbix 客户端安装配置
查看>>
servlet的filter的使用
查看>>
busybox filesystem httpd php-5.5.31 sqlite3 webserver
查看>>
C语言 文件操作5--文件的常用函数
查看>>
遇到的几个难题
查看>>
eclipse插件spket安装
查看>>
ubuntu14.4.4安装smb服务实现文件共享
查看>>
Gallery过时替代方案HorizontalScrollView
查看>>
openCV2马拉松第18圈——坐标变换
查看>>
sql server聚合函数sum计算出来为空,怎样返回0
查看>>
Hadoop源码分析(MapTask辅助类,II)
查看>>
ASP.Net后台 实现先弹出对话框,再跳转到另一个网页的实现方法
查看>>
FullScreenFragment Code
查看>>
telnet命令使用示例
查看>>
Maven的配置文件pom.xml
查看>>
SSRF安全威胁在JAVA代码中的应用
查看>>
【转】Spark性能优化指南——基础篇
查看>>
我思故我在
查看>>
.NET Core dotnet 命令大全
查看>>
Android Studio 运行、编译卡死的解决办法
查看>>