昨天B老师给我布置了第一个作业,基于kaggle上经典的titanic生存数据做分类模型。
要求
data:https://www.kaggle.com/c/titanic
要求:
1. 用python脚本实现一个简单的逻辑回归,模型学习过程需要自己实现。
2. 记录模型学习的过程,绘制学习曲线、准确率曲线
3. 可以参考别人的作业
5.26
- 了解了一下线性回归的批量梯度下降:
https://www.cnblogs.com/wallacup/p/6017378.html - 学习一下python常用数据统计包:numpy/pandas
https://morvanzhou.github.io
6.3
- 利用周末两天的时间封闭写作业
- 结果:
- 用网上的case数据集实现了逻辑回归的批量/随机梯度下降求解函数定义
- 利用pandas、numpy包对Titanic的training set进行描述性统计(统计量计算、scatter plot)、数据预处理(缺失值处理、特征工程)
- 没有找到将pandas特征处理过后的数据集转换成自建函数input数据格式(array/list)的方法,因此没有将处理后的数据集放到自定义函数中实现模型计算。Simon:【方法1】dataframe直接转input list;【方法2】dataframe转csv转input
- cross validation 和 learning curve 还未开始写
- 问题:
- 花了较多时间在理解和推导逻辑回归的梯度下降的vectorization(向量化,看书时能看懂,但编程时发现有特殊处理。同理,其他算法是否可以有显示的向量化结果,不然求和求导会爆炸?) Simon:向量化过程是基础能力,处理的模型多了自然能一眼看出向量化的方法,尤其是运用TensorFlow的过程中,都需要向量化处理。
- 花了较多时间在学习pandas、numpy的数据处理函数(矩阵运算、基于dataframe的数据透视和处理),处理数据特性(边查边看边学边写)
- 花了较多时间适应pycharm的开发和调试环境,不知道自己的调试方式是否正确,开发效率较低(在R中每次运行的结果会保存,在pycharm中每次运行不生成特定的解释器,无法继续基于上次开发的结果进行编译,每次都要重新来= =)Simon:可以在ipython中的python interpreter中直接编写,通过history命令整理代码。
- Action:请教一下专业的算法同学,看一下实际数据处理过程一般是以哪种数据格式进行存储(数据预处理、建模),如何在pycharm中提高开发效率?Simon:要有这种思维:将数据预处理/特征工程 和 建模 的过程分开对待。数据预处理过程如果数据量小可以在pandas中实现,如果数据量大,在线上通过sql实现。而建模过程和数据预处理是独立的。
贴一下这两天的劳动成果
logistics regression的gd、sgd
from numpy import *
import matplotlib.pyplot as plt
import time
def loadtrainingata():
train_x = []
train_y = []
fileIn = open(r'D:\ML\h1_Tianic\testset.txt')
for line in fileIn.readlines():
lineArr = line.strip().split()
train_x.append([1.0, float(lineArr[0]), float(lineArr[1])])
train_y.append(float(lineArr[2]))
return mat(train_x), mat(train_y).transpose()
#Sigmod Function
def sigmoid(inX):
return 1.0 / (1 + exp(-inX))
#Logistic Regression
def trainLogicReg(train_x, train_y, opts):
# calculate training time
startTime = time.time()
# train_x= mat(train_x)
numSamples, numFeatures = shape