机器学习第一讲--------线性回归算大总结
1,梯度下降法
含 一 个 θ 时 h θ = θ x 含一个\theta 时 h\theta=\theta x 含一个θ时hθ=θx
c = f ( θ ) = ( h θ ( x ) − y ) 2 c=f(\theta)=(h\theta(x)-y)^2 c=f(θ)=(hθ(x)−y)2
令 m i n C 约 等 于 0 令minC约等于0 令minC约等于0
则 g r a d = − ∂ c / ∂ θ 则grad=-∂c/∂\theta 则grad=−∂c/∂θ
θ = θ − g r a d ∗ 0.1 ( 0.1 代 表 学 习 率 ) \theta=\theta-grad*0.1 (0.1代表学习率) θ=θ−grad∗0.1(0.1代表学习率)
x1 | x2 | y |
---|---|---|
1.1 | 6 | 20 |
1.2 | 7 | 25 |
1.28 | 8 | ? |
含 多 个 θ 时 含多个\theta时 含多个θ时
f ( θ 1 , θ 2 , θ 3 . . . . , θ n ) = θ 1 x 1 + θ 1 x 2 + . . . . + θ n x n = H f(\theta_1,\theta_2,\theta_3....,\theta _n)=\theta_1x_1+\theta_1x_2+....+\theta _nx_n=H f(θ1,θ2,θ3....,θn)=θ1x1+θ1x2+....+θnxn=H
L ( θ 1 , θ 2 . . . . , θ n ) = ( H 1 − Y 1 ) 2 + ( H 2 − Y 2 ) 2 + . . . . . + ( H n − Y n ) 2 L(\theta_1,\theta_2....,\theta _n)=(H_1-Y_1)^2+(H_2-Y_2)^2+.....+(H_n-Y_n)^2 L(θ1,θ2....,θn)=(H1−Y1)2+(H2−Y2)2+.....+(Hn−Yn)2
= ∑ i = 1 n ( H − Y ) 2 =\sum_{i=1}^{n}{(H-Y)^2} =i=1∑n(H−Y)2
这时就可以使用矩阵的方法处理问题
使用python来实现
添加矩阵相关的numpy库
def gradient_dexcending(thate,x,y,learning_rate):
return thate+get_grad(thate,x,y)*learning_rate
#偏离值
def get_cost(thate,x,y):
return np.sum((np.dot(x,thate)-y)**2)
thate=np.array([1,1])
x=np.array([[1,2],[1,2]])
y=np.array([0,0])
buchang=0.1
**名词理解 **
梯度:函数下降最快的方向
学习率:步长
损失函数:选取最优的θ,在我们的训练集中让h(x)尽可能接近真实的值。h(x)和真实的值之间的差距,我们定义 了一个函数来描述这个差距,这个函数称为损失函数
2,pandas的使用
“
df_movies=pd.read_csv("douban4.csv",encoding="utf-8")
print(df_movies)
#丢弃全部为缺失值的行
df_movies1=df_movies.dropna(how='all')
print("丢弃全部为缺失值的行")
print(df_movies1)
#dropna()方法如果不设置任何参数 默认丢弃任何含有缺省值的行
df_movies2=df_movies.dropna()
print("dropna()方法如果不设置任何参数 默认丢弃任何含有缺省值的行")
print(df_movies2)
#axis=1意味着按列执行
df_movies3= df_movies.dropna(how='all',axis=1)
print("axis=1意味着按列执行")
print(df_movies3)
df_movies4=df_movies.dropna(axis=1)
print("dropna默认就是丢弃任何行或列的缺失值,axis=1设置对列check。")
print(df_movies4)
df_movies5=df_movies.fillna(0)
print("使用DataFrame对象的fillna()可以实现数据的填充。它默认返回一个新对象,原对象中的值不变。fillna()中的参数如设置为常数值,则会将缺失值替换为设定的常数值。")
print(df_movies5)
df_movies6=df_movies.fillna({"rating":5.0,"year":2018})
print("通过一个字典调用fillna()就可以实现不同列填充不同值。字典的key为列名,value为填充的值")
print(df_movies6)
df_movies.fillna({"rating":5.0,"year":2018},inplace=True)
print(df_movies)
”