没有合适的资源?快使用搜索试试~ 我知道了~
首页机器学习公式推导与纯Python实践30课
"《机器学习30讲.pdf》是一本深入浅出的教程,专为那些希望深入了解机器学习原理并提升编程技能的学习者精心设计。该教材从线性回归开始,涵盖了各种经典机器学习算法,如逻辑回归、k近邻、决策树(ID3和CART)、感知机、神经网络、支持向量机(线性可分与不可分)、朴素贝叶斯、贝叶斯网络、正则化方法(Lasso和Ridge)、集成学习方法(GBDT、AdaBoost、XGBoost、LightGBM和CatBoost)、随机森林、最大信息熵模型、EM算法、CRF条件随机场、HMM隐马尔可夫模型、聚类(k-means)和降维方法(PCA、LDA),以及数学推导和纯Python实现。作者强调,虽然使用如sklearn这样的封装库可以大大提高效率,但理解和掌握算法背后的数学推导是至关重要的。 学习过程中,作者提倡学生们首先通过理论学习,理解每种算法的基本原理,然后尝试手推数学公式,仅借助numpy和pandas等基础库来编写算法。这样做的好处在于,不仅可以增强对算法的理解,还能锻炼编程能力,使学习者能够独立解决实际问题,而不只是依赖现成的工具。因此,《机器学习30讲》不仅提供了算法的实现指南,更是一个引导读者逐步深化对机器学习理论和实践应用的桥梁。"
资源详情
资源推荐
2020/7/29 数学推导+纯Python实现机器学习算法2:逻辑回归
https://mp.weixin.qq.com/s?__biz=MzI4ODY2NjYzMQ==&mid=2247484501&idx=1&sn=e378d74f3c46b402643c4fe13a26f162&chksm=ec3ba13
…
5/12
'dW': dW,
'db': db
}
return cost_list, params, grads
定义对测试数据的预测函数:
def predict(X, params):
y_prediction = sigmoid(np.dot(X, params['W']) + params['b'])
for i in range(len(y_prediction)):
if y_prediction[i] > 0.5:
y_prediction[i] = 1
else:
y_prediction[i] = 0
return y_prediction
使用 sklearn 生成模拟的二分类数据集进行模型训练和测试:
数据分布展示如下:
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_classification
X,labels=make_classification(n_samples=100, n_features=2, n_redundant=0, n_informative=2
rng=np.random.RandomState(2)
X+=2*rng.uniform(size=X.shape)
unique_lables=set(labels)
colors=plt.cm.Spectral(np.linspace(0, 1, len(unique_lables)))
for k, col in zip(unique_lables, colors):
x_k=X[labels==k]
plt.plot(x_k[:, 0], x_k[:, 1], 'o', markerfacecolor=col, markeredgecolor="k",
markersize=14)
plt.title('data by make_classification()')
plt.show()
2020/7/29 数学推导+纯Python实现机器学习算法2:逻辑回归
https://mp.weixin.qq.com/s?__biz=MzI4ODY2NjYzMQ==&mid=2247484501&idx=1&sn=e378d74f3c46b402643c4fe13a26f162&chksm=ec3ba13
…
6/12
对数据进行简单的训练集与测试集的划分:
offset = int(X.shape[0] * 0.9)
X_train, y_train = X[:offset], labels[:offset]
X_test, y_test = X[offset:], labels[offset:]
y_train = y_train.reshape((-1,1))
y_test = y_test.reshape((-1,1))
print('X_train=', X_train.shape)
print('X_test=', X_test.shape)
print('y_train=', y_train.shape)
print('y_test=', y_test.shape)
对训练集进行训练:
cost_list, params, grads = lr_train(X_train, y_train, 0.01, 1000)
迭代过程如下:
对测试集数据进行预测:
y_prediction = predict(X_test, params)
print(y_prediction)
预测结果如下:
2020/7/29 数学推导+纯Python实现机器学习算法2:逻辑回归
https://mp.weixin.qq.com/s?__biz=MzI4ODY2NjYzMQ==&mid=2247484501&idx=1&sn=e378d74f3c46b402643c4fe13a26f162&chksm=ec3ba13
…
7/12
定义一个分类准确率函数对训练集和测试集的准确率进行评估:
def accuracy(y_test, y_pred):
correct_count = 0
for i in range(len(y_test)):
for j in range(len(y_pred)):
if y_test[i] == y_pred[j] and i == j:
correct_count +=1
accuracy_score = correct_count / len(y_test)
return accuracy_score
# 打印训练准确率
accuracy_score_train = accuracy(y_train, y_train_pred)
print(accuracy_score_train)
查看测试集准确率:
accuracy_score_test = accuracy(y_test, y_prediction)
print(accuracy_score_test)
没有进行交叉验证,测试集准确率存在一定的偶然性哈。
最后我们定义个绘制模型决策边界的图形函数对训练结果进行可视化展示:
def plot_logistic(X_train, y_train, params):
n = X_train.shape[0]
xcord1 = []
2020/7/29 数学推导+纯Python实现机器学习算法2:逻辑回归
https://mp.weixin.qq.com/s?__biz=MzI4ODY2NjYzMQ==&mid=2247484501&idx=1&sn=e378d74f3c46b402643c4fe13a26f162&chksm=ec3ba13
…
8/12
ycord1 = []
xcord2 = []
ycord2 = []
for i in range(n):
if y_train[i] == 1:
xcord1.append(X_train[i][0])
ycord1.append(X_train[i][1])
else:
xcord2.append(X_train[i][0])
ycord2.append(X_train[i][1])
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(xcord1, ycord1,s=32, c='red')
ax.scatter(xcord2, ycord2, s=32, c='green')
x = np.arange(-1.5, 3, 0.1)
y = (-params['b'] - params['W'][0] * x) / params['W'][1]
ax.plot(x, y)
plt.xlabel('X1')
plt.ylabel('X2')
plt.show()
plot_logistic(X_train, y_train, params)
组件封装成逻辑回归类
将以上实现过程使用一个 python 类进行封装:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_classification
class logistic_regression():
def __init__(self):
pass
def sigmoid(self, x):
2020/7/29 数学推导+纯Python实现机器学习算法2:逻辑回归
https://mp.weixin.qq.com/s?__biz=MzI4ODY2NjYzMQ==&mid=2247484501&idx=1&sn=e378d74f3c46b402643c4fe13a26f162&chksm=ec3ba13
…
9/12
z = 1 / (1 + np.exp(-x))
return z
def initialize_params(self, dims):
W = np.zeros((dims, 1))
b = 0
return W, b
def logistic(self, X, y, W, b):
num_train = X.shape[0]
num_feature = X.shape[1]
a = self.sigmoid(np.dot(X, W) + b)
cost = -1 / num_train * np.sum(y * np.log(a) + (1 - y) * np.log(1 - a))
dW = np.dot(X.T, (a - y)) / num_train
db = np.sum(a - y) / num_train
cost = np.squeeze(cost)
return a, cost, dW, db
def logistic_train(self, X, y, learning_rate, epochs):
W, b = self.initialize_params(X.shape[1])
cost_list = []
for i in range(epochs):
a, cost, dW, db = self.logistic(X, y, W, b)
W = W - learning_rate * dW
b = b - learning_rate * db
if i % 100 == 0:
cost_list.append(cost)
if i % 100 == 0:
print('epoch %d cost %f' % (i, cost))
params = {
'W': W,
'b': b
}
grads = {
'dW': dW,
'db': db
}
return cost_list, params, grads
def predict(self, X, params):
y_prediction = self.sigmoid(np.dot(X, params['W']) + params['b'])
for i in range(len(y_prediction)):
if y_prediction[i] > 0.5:
y_prediction[i] = 1
else:
y_prediction[i] = 0
return y_prediction
def accuracy(self, y_test, y_pred):
剩余251页未读,继续阅读
qq_33980816
- 粉丝: 1
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- JDK 17 Linux版本压缩包解压与安装指南
- C++/Qt飞行模拟器教员控制台系统源码发布
- TensorFlow深度学习实践:CNN在MNIST数据集上的应用
- 鸿蒙驱动HCIA资料整理-培训教材与开发者指南
- 凯撒Java版SaaS OA协同办公软件v2.0特性解析
- AutoCAD二次开发中文指南下载 - C#编程深入解析
- C语言冒泡排序算法实现详解
- Pointofix截屏:轻松实现高效截图体验
- Matlab实现SVM数据分类与预测教程
- 基于JSP+SQL的网站流量统计管理系统设计与实现
- C语言实现删除字符中重复项的方法与技巧
- e-sqlcipher.dll动态链接库的作用与应用
- 浙江工业大学自考网站开发与继续教育官网模板设计
- STM32 103C8T6 OLED 显示程序实现指南
- 高效压缩技术:删除重复字符压缩包
- JSP+SQL智能交通管理系统:违章处理与交通效率提升
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功