第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

【九月打卡】第4天 Python3入門(mén)機(jī)器學(xué)習(xí)

①课程介绍


课程名称:Python3入门机器学习 经典算法与应用 入行人工智能
课程章节:第六章
主讲老师:liuyubobobo

内容导读


  • 第一部分 对四种算法进行效率比较
  • 第二部分 一个关于小批量梯度下降的问题

②课程详细


第一部分

这一章的结尾我想对四种算法进行效率与准确率上的比较,批量梯度下降法,随机梯度下降法,小批量梯度下降法,在特征量增大,或者训练量增大的情况下,效率会产生什么样的变化,以此来探究不同算法的应用场景。
导入函数

import numpy as np
import matplotlib.pyplot as plt

数据初始化

np.random.seed(666)
X = np.random.random(size=(10000,10000))

true_theta = np.arange(X.shape[1]+1,dtype=float)
true_theta

X_b = np.concatenate([np.ones((len(X),1)),X],axis=1)

y = X_b.dot(true_theta)

分割数据,并归一化

from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y)

standard = StandardScaler()
standard.fit(X_train)
X_train_standard = standard.transform(X_train)
X_test_standard = standard.transform(X_test)

公式下降法

from nike.LinearRegression import LinearRegression
reg1 = LinearRegression()
%time reg1.fit_normal(X_train_standard, y_train)
reg1.score(X_test_standard, y_test)

批量梯度下降

from sklearn.linear_model import LinearRegression
reg2 = LinearRegression()
%time reg2.fit(X_train_standard, y_train)
reg2.score(X_test_standard, y_test)

随机梯度下降法

from sklearn.linear_model import SGDRegressor
reg3 = SGDRegressor()
%time reg3.fit(X_train_standard, y_train)
reg3.score(X_test_standard, y_test)

小批量梯度下降法

from sklearn.linear_model import BayesianRidge
reg4 = BayesianRidge()
%time reg4.fit(X_train_standard, y_train)
reg4.score(X_test_standard, y_test)

第二部分 一个关于小批量梯度下降的问题

承接上文,在对X的训练量和特征数参数测试效率的过程中,我发现自己实现的小批量梯度下降算法,越来越大的情况下,准确率会极速下降,而sklearn算法则不会影响,我在想我们实现随机梯度下降法的方式是不是有些许问题

def init(m,n):
	#初始化数据
	np.random.seed(666)
	X = np.random.random(size=(m,n))
	true_theta = np.arange(X.shape[1]+1,dtype=float)
	
	X_b = np.concatenate([np.ones((len(X),1)),X],axis=1)
	#对y不加噪点,我觉得数据量可能有点大算的有点慢
	y = X_b.dot(true_theta)
	#归一化+分割数据
	from sklearn.preprocessing import StandardScaler
	from sklearn.model_selection import train_test_split

	X_train, X_test, y_train, y_test = train_test_split(X, y)
	
	standard = StandardScaler()
	standard.fit(X_train)
	X_train_standard = standard.transform(X_train)
	X_test_standard = standard.transform(X_test)
	return	X_train_standard, X_test_standard, y_train, y_test

我自己写的代码小批量梯度下降


score_history=[]
reg1 = LinearRegression()
#将数据从1-100逐级递增,计算代码准确率并记录,用于绘制n与socre的图形
for i in range(1,120):
	X_train_standard, X_test_standard, y_train, y_test=init(1000,i)
	reg1.fit_sgd(X_train_standard, y_train)
    score_history.append(reg3.score(X_test_standard, y_test))
#绘制图形
plt.plot([i for i in range(len(score_history))],score_history)
plt.axis([0,100, -3,1.2])
plt.xlabel('n')
plt.ylabel('R2-Score value')
plt.show()

图片描述
从bobo老师那里复制的小批量梯度下降

score_history=[]
reg2 = LinearRegression2()
#将数据从1-120逐级递增,计算代码准确率并记录,用于绘制n与socre的图形
for i in range(1,120):
	X_train_standard, X_test_standard, y_train, y_test=init(1000,i)
	reg2.fit_sgd(X_train_standard, y_train)
    score_history.append(reg2.score(X_test_standard, y_test))
#绘制图形
plt.plot([i for i in range(len(score_history))],score_history)
plt.axis([0,100, -3,1.2])
plt.xlabel('n')
plt.ylabel('R2-Score value')
plt.show()

图片描述

#机器学习sklearn
from sklearn.linear_model import SGDRegressor
score_history=[]
reg3 = SGDRegressor()
#将数据从1-120逐级递增,计算代码准确率并记录,用于绘制n与socre的图形
for i in range(1,120):
	X_train_standard, X_test_standard, y_train, y_test=init(1000,i)
	reg3.fit(X_train_standard, y_train)
    score_history.append(reg3.score(X_test_standard, y_test))
#绘制图形
plt.plot([i for i in range(len(score_history))],score_history)
plt.axis([0,100, -3,1.2])
plt.xlabel('n')
plt.ylabel('R2-Score value')
plt.show()

图片描述

这个问题最后也是bobo老师代为解决的:不是我们的实现“有问题”,而是我们的实现可以更好。但是继续优化这个 SGD 的过程已经不是这个课程的目标了。sklearn 中的 SGD 的原理和我们课程介绍的原理是一致的。但是在细节上,无论是“随机梯度方向的计算”,还是“学习率的自适应变换”,都更加复杂。

第三部分

③课程思考


数据前解释,m=X的训练量,n=X的特征数量
1.m很大 , n较小(m=1000w,n=10)

  • #公式下降: 10.3 s|1.0
  • #批量梯度下降:5.86 s|1.0
  • #随机梯度下降:46.4 s|0.9999999896236609
  • #小批量梯度下降法:10.6 s|1.0
>>在训练量很大的时候且维度较小的时候,使用<公式下降或批量梯度下降或小批量梯度下降法>都是不错的选择

2.m,n都很大(m=10000,n=10000)

  • #公式下降:13min 48s|-473.09757045443126
  • #批量梯度下降:4min 58s|-12.752179227330855
  • #随机梯度下降:34.3 s|-54223552442710.266
  • #小批量梯度下降法:6min 6s|0.7442073384872584
>>在训练量和维度都很大的情况下,公式下降法消耗的时间急速上升,准确率下降地很快,使用<批量梯度下降>是更好的选择

3.n很大 ,m较小(m=100,n=10000)

  • #公式下降:8min 9s|-5.328102579688343

  • #批量梯度下降:137 ms|-0.6312338721134305

  • #随机梯度下降:117 ms|-15699348450402.361

  • #小批量梯度下降法:1.08 s|-0.002605367097514355

     >>在训练量很小,维度都很大的情况下,,使用<批量梯度下降>是更好的选择
    

总结:在维度小于5000,且m>>n情况使用公式下降法都是很合适的,反之使用批量梯度下降法更好。

④课程截图

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消