Wu Enda機械学習コースの割り当て(1)Pythonに基づく詳細な分析

@単変量線形回帰

序文

スタンフォード大学のWuEnda先生の機械学習コースは、人工知能の分野を愛するすべての学生にとってほぼ必須のコースです。インターネット上には多くのPythonベースのコードがありますが、それらのほとんどはPythonインタラクティブモードインタープリターipythonを使用して説明しています。私はpycharmを使用して、自分の理解に基づいてソースコードと個人的な理解を提供しています。一部のコードは他のコードを参照している場合があります。侵害がある場合は、プライベートメッセージを送ってください。

1.質問の議論

単変量線形回帰アルゴリズムは、都市の人口に基づいてスナックバーを開くことの利益を予測する必要があります。
データはCourseraから取得できます。最初の列は都市の人口であり、2番目の列は都市の利益です。市内のスナックバー。

2、コード分析

1.ライブラリを紹介します

コードは次のとおりです(例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

numpyライブラリ、pandasライブラリ、matplotlibライブラリは、それぞれpythonの線形代数、データ処理、描画関数を実装しています。人工知能アルゴリズムを実装するたびに、これら3つのモジュールなしでは実行できません。

2.データを読み込みます

コードは次のとおりです(例):

path ='D:\machine learning data\ex1data1.txt'
data = pd.read_csv(path, header=None, names=['Population', 'Profit'])

read_csvのパラメータヘッダーは、列名として使用される行数と、データが開始される行数を指定します。ファイルに列名がない場合、デフォルトは0です。それ以外の場合は、「なし」に設定されます。header = 0を明示的に設定すると、元の既存の列名が置き換えられます。

3.データ処理

コードは次のとおりです(例):

data.insert(0, 'Ones', 1)#在第0列插入一列,这列值全为1
clos=data.shape[1]  #shape[1]取列数,[0]取行数,clos=3
X=data.iloc[:,0:clos-1]#iloc,行全选,选01列,是前闭后开集合.X为DataFrame形式,既有行索引,也有列索引
y=data.iloc[:,clos-1:clos]#行全选,选最后一列
#print(X.head())  #验证X,y
#print(y.head())
X = np.matrix(X.values)#将X,y转化成矩阵
y = np.matrix(y.values)
theta=np.matrix([0,0]) #将theta转化成空矩阵j

0番目の列に新しい列を挿入する必要があることに注意してください。これは、theta0と組み合わされたパラメーターの列です。そのような列がない場合、構築されるモデルは、原点を通過する直線や平面などです。同時に、行列を構築するための行列と配列の違いは次のとおりです。行列は1次元の行列しか構築できません。 、配列は多次元行列を作成できますが、numpyの主行列利点は次のとおりです。乗算の表記が比較的単純です。たとえば、aとbが2つの行列の場合、a * bは行列の積です。np.dot()の代わりに

4.コスト関数を計算します

コードは次のとおりです(例):

def computeCost(X, y, theta):#计算代价函数
    inner=np.power(((X*theta.T)-y),2)
    return np.sum(inner)/(2 * len(X))#len(X)为行数,即公式中的m
print(computeCost(X, y, theta))

ここで、コンピューターに初期コストを計算させることができます。結果は32.072733877455676です。同時に、theta.Tはシータの転置を表すことに注意してください。シータが転置されていない場合、正しい結果が得られません。

5.最急降下アルゴリズムが最適解を計算します

コードは次のとおりです(例):

def gradientDescent(X, y, theta, alpha, iters):#alpha学习率,iters迭代次数
    temp = np.matrix(np.zeros(theta.shape))#一个与theta相同维度的0矩阵
    parameters=int(theta.ravel().shape[1]) #ravel()将多维降为一维
    cost = np.zeros(iters)#保存迭代之后的cost
    for i in range(iters):
        error=(X*theta.T)-y
        for j in range(parameters):
            term=np.multiply(error,X[:,j])
            temp[0,j]=theta[0,j] - np.sum(term)*(alpha/len(X))
        theta=temp
        cost[i]=computeCost(X, y, theta)
    return theta, cost
alpha = 0.01
iters= 1500
g,cost = gradientDescent(X, y, theta, alpha, iters)
print(g)
print(computeCost(X, y, g))#使用拟合值来计算代价函数(误差)

ここで、アルファとイターは、それぞれ学習率と反復回数を表します。npライブラリの乗算関数は、従来の意味での行列乗算計算ではなく、行列または配列の対応する位置を乗算するために使用されることに注意してください。

6.描画

コードは次のとおりです(例):

x = np.linspace(data.Population.min(), data.Population.max(), 100) #横坐标在最大和最小之间分100份
f = g[0, 0] + (g[0, 1] * x)
fig, ax = plt.subplots(figsize=(12,8))
ax.plot(x, f, 'r', label='Prediction')
ax.scatter(data.Population, data.Profit, label='Traning Data')
ax.legend(loc=2)
ax.set_xlabel('Population')
ax.set_ylabel('Profit')
ax.set_title('Predicted Profit vs. Population Size')
plt.show()

最後に、描画操作にmatplotlib.pyplotライブラリを使用できます。この時点で、他の人の助けを借りずに重複コードを理解できれば、基本的に宿題の要件を完了していることを意味します。

総括する

私は大学2年生で、寮で機械学習アルゴリズムを勉強しているので、定期的に記事を更新することはできませんが、好きな分野でできるだけ早く新しい記事を完成させるように頑張ります。

おすすめ

転載: blog.csdn.net/cc512613/article/details/115309287