1. 程式人生 > >機器學習&深度學習實踐(python版)系列----Linear Regression(線性迴歸)

機器學習&深度學習實踐(python版)系列----Linear Regression(線性迴歸)

    今天和一位師兄決定複習一下Andrew Ng的機器學習和深度學習教程理論知識,用Python實現教程中的練習。教程分為:

    我們決定從機器學習開始,逐漸實現。

    寫這個系列主要是方便以後學習,也是對前期學習的一個總結。歡迎大家共同討論!

今天是第一篇:線性迴歸

1、理論

具體理論就不細講了,大家可以看教程,在這裡貼上幾個重要的公式:

注意:裡面的學習率設定為0.07

2、程式碼(python)

# -*- coding: utf-8 -*-
"""
Created on Fri Dec 11 09:55:23 2015

@author: Administrator
"""

import matplotlib.pyplot as plt
import sys
import numpy as np
"""
#載入資料
def load(file_name):
    data=[]
    try:
        file_txt=open(file_name,"r")
    except IOError:
        print >> sys.stderr, "File could not be opened"
        sys.exit(1)
    lines = file_txt.readlines()
    for line in lines:
        cur_line = line.strip().split('\n')
        data.append('%f4'%float(cur_line[0]))
        #data.append(cur_line)
    data1 = np.array(data)
    file_txt.close()
    return data1
"""
#載入資料
def load_data(data_name):
    dataMat = []
    fr = open(data_name)
    for line in fr.readlines():
        lineArr = line.strip().split()
        dataMat.append([1.0,float(lineArr[0])])#在第一列加上1.0
    return dataMat
    
#載入標籤
def load_label(label_name):
    labelMat = []
    fr = open(label_name)
    for line in fr.readlines():
        lineArr = line.strip().split()
        labelMat.append(float(lineArr[0]))
    return labelMat
    
    
if __name__ == "__main__":
    x = load_data(r'ex2x.dat')
    #print x
    y = load_label(r'ex2y.dat')
    """
    plt.figure(figsize=(5,4))
    plt.xlabel(r'Age in years')
    plt.ylabel(r'Height in meters')
    plt.title(r'Linear Regression')
    plt.plot(x[1:50][1],y,'o')列印圖,在此不列印了
    """
    x = np.mat(x)#用np.mat轉換成矩陣
    y = np.mat(y).transpose()#將標籤轉置
    m,n = np.shape(x)#獲得矩陣行,列數
    lr = 0.07
    theat = np.mat(np.zeros(n))
    for i in range(1000):#迭代次數可以設定的大些
        h = np.dot(x,theat.transpose())
        det_h = h-y
        det_t = lr*(1.0/m)*np.dot(det_h.transpose(),x)
        theat = theat-det_t
        print theat
3、問題集錦

     由於是第一次用python編寫機器學習的相關程式碼,因此遇到了很多問題,尤其是有關矩陣的操作,在這裡和大家分享,但是我沒有按照問題出現的順序書寫,順序有點亂!

(1)TypeError: unsupported operand type(s) for *: 'builtin_function_or_method' and 'float'

      這個問題的出現主要是在矩陣轉置的時候用transpose函式時沒有加上括號,如treat.transpose是錯誤的,treat.transpose()正確!

錯誤分析:

def load_data(data_name):
    dataMat = []
    fr = open(data_name)
    for line in fr.readlines():
        lineArr = line.strip().split()
        dataMat.append([1.0,float(lineArr[0])])#在第一列加上1.0
    return dataMat

錯誤發生在下面一句,因為lineArr是個list,float(lineArr)是錯誤的
dataMat.append([1.0,float(lineArr[0])])#在第一列加上1.0
float()將字串轉換成浮點型,但是不能講一個列表轉換成浮點型,因此必須加上一個[0],指定將哪個元素轉換成浮點型。在將字串轉換成浮點型時,如果我們想指定轉換後的位數可以使用
a = '%nf'%float(str)

n就是位數。

(3)Python main函式

使用python最不習慣的一點就是不用寫主函式程式就能執行。但是有一個主函式,無論是讀程式還是除錯程式,對我們都有幫助,其實我們可以用下面的語句定義個主函式(注意格式

if __name__=="__main__":
小例項:
<span style="font-size:18px;">#hello.py
def foo():
    str="function"
    print(str);
if __name__=="__main__":
    print("main")
    foo()</span>

(4)讀取*****.dat檔案

開始以為讀取這個型別的檔案需要自己寫個函式,後來發現,讀取這個型別的檔案與讀取****.txt檔案沒有什麼區別。

<span style="font-size:18px;">import sys
try:
    file=open("client.dat","w")
except IOError,message:
    print >> sys.stderr, "File could not be opened",message
    sys.exit(1)
print "Enter the accout,name and age."
while 1:
    try:
        accountline=raw_input("?")
    except EOFError:
        break
    else:
        print >>file,accountline
file.close()</span>

(5)list(列表)轉換成mat(矩陣)

    python中使用的最多的是list,mat反而用的很少,但是一些理論推導中用的都是矩陣,所以乾脆我把list轉成了mat型別。

x = np.mat(x)#將list轉換成mat
y = np.mat(y).transpose()#將標籤轉置
m,n = np.shape(x)#獲得矩陣行,列數
theat = np.mat(np.zeros(n))#建立一個元素為0的矩陣
(6)矩陣乘法

python中計算兩個矩陣的點乘用np.dot(mat1,mat2)函式

<span style="font-size:18px;">h = np.dot(x,theat.transpose())</span>



相關推薦

機器學習&深度學習實踐python系列----Linear Regression線性迴歸

    今天和一位師兄決定複習一下Andrew Ng的機器學習和深度學習教程理論知識,用Python實現教程中的練習。教程分為:     我們決定從機器學習開始,逐漸實現。     寫這個系列主要

Python開始機器學習3:資料擬合與廣義線性迴歸

機器學習中的預測問題通常分為2類:迴歸與分類。簡單的說迴歸就是預測數值,而分類是給資料打上標籤歸類。本文講述如何用Python進行基本的資料擬合,以及如何對擬合結果的誤差進行分析。本例中使用一個2次函式加上隨機的擾動來生成500個點,然後嘗試用1、2、100次方的多項式對該資

機器學習】Apriori演算法——原理及程式碼實現Python

Apriopri演算法 Apriori演算法在資料探勘中應用較為廣泛,常用來挖掘屬性與結果之間的相關程度。對於這種尋找資料內部關聯關係的做法,我們稱之為:關聯分析或者關聯規則學習。而Apriori演算法就是其中非常著名的演算法之一。關聯分析,主要是通過演算法在大規模資料集中尋找頻繁項集和關聯規則。

機器學習實戰》使用Apriori演算法和FP-growth演算法進行關聯分析Python

===================================================================== 《機器學習實戰》系列部落格是博主閱讀《機器學

入門機器學習的第一個程式!python

一. 前言 前兩天看到了網上一個叫做機器學習中的hello world的入門視訊。覺得非常有意思,也進一步對機器學習有了感性認識,覺得非常適合我們瞭解和認識機器學習這一當前的熱門領域。這篇文章是對它的

各大機器學習包彙總python,持續更新

隨著機器學習的逐日升溫,各種相關開源包也是層出不群,面對如此多種類的工具包,該如何選擇,有的甚至還知之甚少或者不知呢,本文簡單彙總了一下當下使用比較多的Python版本機器學習工具包,供大家參看,還很不全不詳盡,會持續更新,也歡迎大家補充,多謝多謝!~~~ scik

手把手教你用Python實踐深度學習|深度學習視頻教程

視頻 ref ati pan 人工神經網絡 com 深度學習 encoder auto 手把手教你用Python實踐深度學習網盤地址:https://pan.baidu.com/s/1mkoC9ELXDglvTNN_xPUWlQ 提取碼: zgpy備用地址(騰訊微雲):ht

機器學習 | 吳恩達機器學習第二週程式設計作業(Python

實驗指導書   下載密碼:hso0 本篇部落格主要講解,吳恩達機器學習第二週的程式設計作業,作業內容主要是實現單元/多元線性迴歸演算法。實驗的原始版本是用Matlab實現的,本篇部落格主要用Python來實現。   目錄 1.實驗包含的檔案 2.單元

機器學習 深度學習資料彙總含文件,資料集,程式碼等

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

github上值得關注的機器學習深度學習大牛持續更新

前言: 因為想搜相關內容發現搜到的基本上都是前端大牛(這可能是由於js是github上最受歡迎的語言),所以打算自己mark一下同時方便他人,於是寫下這篇博文,本文持續更新,如果有童鞋覺得有不錯的賬號也可以評論推薦給我~我也會更新上去~ 大牛:(排名不分先後) 一: Wes McKinn

機器學習/深度學習資源下載合集持續更新...

這篇文章轉載自「譯智社」的成員 —— 林夕的文章機器學習/深度學習資源下載集合(持續更新…)。如果你對人工智慧感興趣,歡迎關注公眾號 —— 譯智社。 從入門到進階,所用到機器學習資料,包括書、視訊、原始碼。文章首發於 Github,若下載資源請跳轉 Github. 文

python 基於機器學習深度學習識別驗證碼

一、前言 開發環境:Anaconda | python 3.5 —pycharm / jupyter notebook 專案的整個識別流程: ① 驗證碼清理並生成訓練集樣本 ② 驗證碼特徵提取 ③ 擬

Python實現機器學習實現多元線性迴歸

接著上一次的一元線性迴歸http://blog.csdn.net/lulei1217/article/details/49385531往下講,這篇文章要講解的多元線性迴歸。 1、什麼是多元線性迴歸模型? 當y值的影響因素不唯一時,採用多元線性迴歸模型。  

Coursera Ng機器學習課練習一之python

      ipython notebook 好用, 方便學習, python 比 mathlab/octave 用途廣, 所以不如用 python 來試試。       honor code 不許公開程式碼, 但我是用 python 實現的, 畢竟不是填空題的作業, 無法

吳恩達機器學習課程:完全用Python完成,可以的!附程式碼

  新智元報道 來源:Reddit、GitHub編輯:肖琴【導讀】完全用Python完成吳恩達的

近200篇機器學習&深度學習資料分享含各種文件,視訊,原始碼等

編者按:本文收集了百來篇關於機器學習和深度學習的資料,含各種文件,視訊,原始碼等。而且原文也會不定期的更新,望看到文章的朋友能夠學到更多。 介紹:這是一篇介紹機器學習歷史的文章,介紹很全面,從感知機、神經網路、決策樹、SVM、Adaboost 到隨機森林、Deep Learning. 介紹:這是瑞

機器學習/深度學習測試題 —— 單層感知器的啟用函式

問,更換單層感知器的啟用函式(比如改為 tanh 函式),能否使模型具有解決非線性分類問題的能力。 tanh(s)=exp(s)−exp(−s)exp(s)+exp(−s) 可知,tanh 過原

機器學習深度學習 筆試面試題目整理2

1. CNN問題: (1) 思想    改變全連線為區域性連線,這是由於圖片的特殊性造成的(影象的一部分的統計特性與其他部分是一樣的),通過區域性連線和引數共享大範圍的減少引數值。可以通過使用多個filter來提取圖片的不同特徵(多卷積核)。      (2)filte

精選機器學習&深度學習視訊資源合集 !附下載連結

來源:大資料探勘DT資料分析 本文長度為1400字,建議閱讀3分鐘 本文為你分享一份機器學習&深度學習視訊資源合集,一起充電吧~ 第一部分 基礎語言 pandax視訊教程連結: https://pan.baidu.com/s/1pLqavVX 密碼: fath python入門到精通

機器學習---用python實現最小二乘線性回歸並用隨機梯度下降法求解 Machine Learning Least Squares Linear Regression Application SGD

lin python get stat linspace oms mach 實現 all 在《機器學習---線性回歸(Machine Learning Linear Regression)》一文中,我們主要介紹了最小二乘線性回歸模型以及簡單地介紹了梯度下降法。現在,讓我們來