第1关:逻辑回归核心思想
import numpy as np
def sigmoid ( t) :
'''
完成sigmoid函数计算
:param t: 负无穷到正无穷的实数
:return: 转换后的概率值
:可以考虑使用np.exp()函数
'''
sig = 1 / ( 1 + np. exp( - t) )
return sig
第2关:逻辑回归的损失函数
1、A
2、ACD
3、AB
4、D
第3关:梯度下降
import numpy as np
import warnings
warnings. filterwarnings( "ignore" )
def gradient_descent ( initial_theta, eta= 0.05 , n_iters= 1000 , epslion= 1e - 8 ) :
'''
梯度下降
:param initial_theta: 参数初始值,类型为float
:param eta: 学习率,类型为float
:param n_iters: 训练轮数,类型为int
:param epslion: 容忍误差范围,类型为float
:return: 训练后得到的参数
'''
theta = initial_theta
i_iter = 0
while i_iter < n_iters:
gradient = 2 * ( theta- 3 )
last_theta = theta
theta = theta - eta* gradient
if ( abs ( theta- last_theta) < epslion) :
break
i_iter += 1
return theta
第4关:动手实现逻辑回归 - 癌细胞精准识别
import numpy as np
import warnings
warnings. filterwarnings( "ignore" )
def sigmoid ( x) :
'''
sigmoid函数
:param x: 转换前的输入
:return: 转换后的概率
'''
return 1 / ( 1 + np. exp( - x) )
def fit ( x, y, eta= 1e - 3 , n_iters= 10000 ) :
'''
训练逻辑回归模型
:param x: 训练集特征数据,类型为ndarray
:param y: 训练集标签,类型为ndarray
:param eta: 学习率,类型为float
:param n_iters: 训练轮数,类型为int
:return: 模型参数,类型为ndarray
'''
theta = np. zeros( x. shape[ 1 ] )
i_iter = 0
while i_iter < n_iters:
gradient = ( sigmoid( x. dot( theta) ) - y) . dot( x)
theta = theta - eta* gradient
i_iter += 1
return theta
第5关:手写数字识别
from sklearn. linear_model import LogisticRegression
def digit_predict ( train_image, train_label, test_image) :
'''
实现功能:训练模型并输出预测结果
:param train_sample: 包含多条训练样本的样本集,类型为ndarray,shape为[-1, 8, 8]
:param train_label: 包含多条训练样本标签的标签集,类型为ndarray
:param test_sample: 包含多条测试样本的测试集,类型为ndarry
:return: test_sample对应的预测标签
'''
flat_train_image = train_image. reshape( ( - 1 , 64 ) )
train_min = flat_train_image. min ( )
train_max = flat_train_image. max ( )
flat_train_image = ( flat_train_image- train_min) / ( train_max- train_min)
flat_test_image = test_image. reshape( ( - 1 , 64 ) )
test_min = flat_test_image. min ( )
test_max = flat_test_image. max ( )
flat_test_image = ( flat_test_image - test_min) / ( test_max - test_min)
rf = LogisticRegression( C= 4.0 )
rf. fit( flat_train_image, train_label)
return rf. predict( flat_test_image)