統(tǒng)計學(xué)習(xí)方法

1.統(tǒng)計學(xué)習(xí)筆記

久聞李航老師的這本統(tǒng)計學(xué)習(xí)方法的大名锌畸,苦于數(shù)學(xué)基礎(chǔ)停留在本科期末考試70分的水平瓮增,戰(zhàn)戰(zhàn)兢兢功咒,最近種草人工智能,多方研究從這本書開始再好不過了桦踊,于是硬著頭皮上了椅野,發(fā)現(xiàn)概念并沒有非常晦澀難懂,詳細的筆記沒有來得及記錄竟闪,下面給出兩個不錯的筆記的鏈接离福。

有一定引申的筆記

比較遵循原著的筆記

2.算法Python實現(xiàn)

實現(xiàn)前只作簡單介紹,理解不到位的地方炼蛤,求大神指點妖爷,此外入門語言是JAVA,python只知道一些基礎(chǔ)語法理朋,寫的比較丑陋絮识,勿噴。

2.1感知機

感知機(二類分類)根據(jù)已有的輸入和輸出(輸出只有1或-1)嗽上,計算得到分離超平面S(wx+b)次舌,其中w是S的法向量,b是S的截距兽愤。然后通過S對位置的輸入給出預(yù)測的輸出分類結(jié)果彼念。

2.1.1原始感知機算法

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D


def loadData():
    """
        加載數(shù)據(jù)
        eg:
        1   1   -1
        0   1   -1
        3   3   1
        4   3   1
        2   0.5 -1
        3   2   1
        4   4   1
        1   2   -1
        3   3   1
        3   4   1
        3   1   -1
        0.5 3   1
        2   2   -1
        3   1.8 -1
        1   3.5 1
        0.5 2.5 -1
    """
    data = np.loadtxt('testSet.txt')
    dataMat = data[:, 0:2]
    labelMat = data[:, 2]
    return dataMat, labelMat


def sign(val):
    if val >= 0:
        return 1
    else:
        return -1


def trainPerceptron(dataMat, labelMat, eta):
    """
        訓(xùn)練模型
        eta: learning rate(可選步)
    """
    m, n = dataMat.shape
    weight = np.zeros(n)
    bias = 0

    flag = True
    while flag:
        for i in range(m):
            if np.any(labelMat[i] * (np.dot(weight, dataMat[i]) + bias) <= 0):
                weight = weight + eta * labelMat[i] * dataMat[i].T
                bias = bias + eta * labelMat[i]
                print("weight, bias: ", end="")
                print(weight, end="  ")
                print(bias)
                flag = True
                break
            else:
                flag = False

    return weight, bias


# 可視化展示分類結(jié)果
def plotResult(dataMat, labelMat, weight, bias):
    fig = plt.figure()
    axes = fig.add_subplot(111)

    type1_x = []
    type1_y = []
    type2_x = []
    type2_y = []
    for i in range(len(labelMat)):
        if (labelMat[i] == -1):
            type1_x.append(dataMat[i][0])
            type1_y.append(dataMat[i][1])

        if (labelMat[i] == 1):
            type2_x.append(dataMat[i][0])
            type2_y.append(dataMat[i][1])

    type1 = axes.scatter(type1_x, type1_y, marker='x', s=20, c='red')
    type2 = axes.scatter(type2_x, type2_y, marker='o', s=20, c='blue')

    y = (0.1 * -weight[0] / weight[1] + -bias / weight[1], 4.0 * -weight[0] / weight[1] + -bias / weight[1])
    axes.add_line(Line2D((0.1, 4.0), y, linewidth=1, color='blue'))

    plt.xlabel('X')
    plt.ylabel('Y')

    plt.show()


def _init_():
    dataMat, labelMat = loadData()
    weight, bias = trainPerceptron(dataMat, labelMat, 1)
    plotResult(dataMat, labelMat, weight, bias)
    return weight, bias

2.1.2運行結(jié)果

結(jié)果圖

2.2k近鄰法

k近鄰法(基本分類或回歸法),根據(jù)訓(xùn)練數(shù)據(jù)輸入的對應(yīng)輸出浅萧,將數(shù)據(jù)進行分類国拇。輸入新的向量X時,找出已有數(shù)據(jù)的k個最靠近X的點惯殊,判斷這些點中最多的類型為T酱吝,則新輸入預(yù)測的對應(yīng)類型為T。求最近距離時一般會用到kd樹土思,優(yōu)化檢索务热。kd樹的創(chuàng)建和檢索過程請查看相關(guān)資料。

2.2.1k鄰近算法

由于導(dǎo)入訓(xùn)練數(shù)據(jù)和可視化代碼類似這里省略

import numpy as np
import matplotlib.pyplot as plt
import operator

# 根據(jù)輸入測試實例進行k-近鄰分類
def classify(in_x, data_set, labels, k):
    data_set_size = data_set.shape[0]
    diff_mat = np.tile(in_x, (data_set_size, 1)) - data_set
    sq_diff_mat = diff_mat ** 2
    sq_distances = sq_diff_mat.sum(axis=1)
    distances = sq_distances ** 0.5
    sorted_dist_indicies = distances.argsort()
    class_count = {}
    for i in range(k):
        vote_ilabel = labels[sorted_dist_indicies[i]]
        class_count[vote_ilabel] = class_count.get(vote_ilabel, 0) + 1
    sorted_class_count = sorted(class_count.items(), key=operator.itemgetter(1), reverse=True)
    return sorted_class_count[0][0]

def _init_(x, k):
    dataMat, labelMat = loadData('testSet.txt')
    in_x = x
    plotResult(dataMat, labelMat, in_x)
    result = int(classify(in_x, dataMat, labelMat, k))
    return result

2.2.2運行結(jié)果

類別1黑色己儒,類別2綠色崎岂,類別3黃色,新數(shù)據(jù)是紅色叉叉

結(jié)果圖

簡單的測試結(jié)果如下:

訓(xùn)練數(shù)據(jù):[3,5] k值:1 結(jié)果:3

訓(xùn)練數(shù)據(jù):[3,5] k值:5 結(jié)果:2

訓(xùn)練數(shù)據(jù):[3,5] k值:15 結(jié)果:1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末闪湾,一起剝皮案震驚了整個濱河市冲甘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌途样,老刑警劉巖江醇,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異何暇,居然都是意外死亡陶夜,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門裆站,熙熙樓的掌柜王于貴愁眉苦臉地迎上來条辟,“玉大人黔夭,你說我怎么就攤上這事∮鸬眨” “怎么了本姥?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長杭棵。 經(jīng)常有香客問我婚惫,道長,這世上最難降的妖魔是什么颜屠? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任辰妙,我火速辦了婚禮鹰祸,結(jié)果婚禮上甫窟,老公的妹妹穿的比我還像新娘。我一直安慰自己蛙婴,他們只是感情好粗井,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著街图,像睡著了一般浇衬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上餐济,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天耘擂,我揣著相機與錄音,去河邊找鬼絮姆。 笑死醉冤,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的篙悯。 我是一名探鬼主播蚁阳,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鸽照!你這毒婦竟也來了螺捐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤矮燎,失蹤者是張志新(化名)和其女友劉穎定血,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诞外,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡糠悼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了浅乔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倔喂。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡铝条,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出席噩,到底是詐尸還是另有隱情班缰,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布悼枢,位于F島的核電站埠忘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏馒索。R本人自食惡果不足惜莹妒,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绰上。 院中可真熱鬧旨怠,春花似錦、人聲如沸蜈块。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽百揭。三九已至爽哎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間器一,已是汗流浹背课锌。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留祈秕,地道東北人渺贤。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像踢步,于是被迫代替她去往敵國和親癣亚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容