1. 程式人生 > >卡方檢驗 兩分類實現

卡方檢驗 兩分類實現

import jieba
import numpy as np
import xlrd
import re
import json




# 資料載入
# jieba詞庫設定




#讀取文字,讀取其中1個
#統計包含a的單詞和不包含a的單詞
#統計主題
def chisquare(datasetTrue, datasetFlase):
    dicta ={}
    dictb ={}
    for i in datasetTrue:
        for word in i:
            if word not in dicta:
                dicta[word] = 0
            else:
                dicta[word] = dicta[word] + 1
    for i in datasetFlase:
        if word in i:
            if word not in dictb:
                dictb[word] = 0
            else:
                dictb[word] = dictb[word] + 1


    keyset = set()
    for i in dicta:
        keyset.add(i)
    for i in dictb:
        keyset.add(i)


    dictres = {}
    for w in keyset:
        if w not in dicta:
            a = 0
        else:
            a = dicta[w]
        if w not in dictb:
            b = 0
        else:
            b = dictb[w]


        c = len(datasetTrue)-a
        d = len(datasetFlase)-b
        #print(a,b,c,d)
        if (a>0 or b>0):
            chi = (a * d - b * c) ** 2 / ((a + c) * (a + b) * (b + d) * (c + d))
            print(w,chi)
            dictres[w] = chi
    return dictres
    pass




def data_gen():
    xlsfile = r'E:\work\chisquare\file\test0111.xlsx'
    book = xlrd.open_workbook(xlsfile)  # 得到Excel檔案的book物件
    sheet0 = book.sheet_by_index(0)  # 通過sheet索引獲得sheet物件
    nrows = sheet0.nrows
    jiahuoTrue = []
    jiahuoFlase = []
    for rownum in range(1, nrows):
        rowvalue = sheet0.cell_value(rownum, 2)
        rowflag = sheet0.cell_value(rownum, 1)
        if (rowflag == 1):
            jiahuoTrue.append(rowvalue)
        elif (rowflag == 0):
            jiahuoFlase.append(rowvalue)
    return jiahuoTrue,jiahuoFlase


def getwordlist(datasetTrue,datasetFlase):
    s = set()
    for i in datasetTrue:
        for w in i:
            s.add(w)
    for i in datasetFlase:
        for w in i:
            s.add(w)
    return s




# 執行評分過程
def run():
    jt,jf =data_gen()
    datasetTrue = [list(set(jieba.lcut(d))) for d in jt]
    datasetFlase = [list(set(jieba.lcut(d))) for d in jf]
    dict = chisquare(datasetTrue, datasetFlase)
    import pandas as pd
    arr = list(dict.items())
    df = pd.DataFrame(list(dict.items()), columns=['word', 'score'])
    return df
    pass




if __name__ == '__main__':
    df1=run()
    df1.sort_values("score").to_csv("res2")

    print("end")

之前的老版本一個詞一個詞計算,演算法是錯誤的,要跑幾分鐘

import jieba
import numpy as np
import xlrd
import re
import json




# 資料載入
# jieba詞庫設定


#讀取文字,讀取其中1個
#統計包含a的單詞和不包含a的單詞
#統計主題
def chisquare(datasetTrue, datasetFlase, word):
    a=b=c=d=0
    for i in datasetTrue:
        if word in i:
            a+=1
        else:
            c+=1
    for i in datasetFlase:
        if word in i:
            b+=1
        else:
            d+=1
    chi =  (a*d-b*c)**2/((a+c)*(a+b)*(b+d)*(c+d))
    #print(chi)
    return chi
    pass




def data_gen():
    xlsfile = r'E:\work\chisquare\file\test0111.xlsx'
    book = xlrd.open_workbook(xlsfile)  # 得到Excel檔案的book物件
    sheet0 = book.sheet_by_index(0)  # 通過sheet索引獲得sheet物件
    nrows = sheet0.nrows
    jiahuoTrue = []
    jiahuoFlase = []
    for rownum in range(1, nrows):
        rowvalue = sheet0.cell_value(rownum, 2)
        rowflag = sheet0.cell_value(rownum, 1)
        if (rowflag == 1):
            jiahuoTrue.append(rowvalue)
        elif (rowflag == 0):
            jiahuoFlase.append(rowvalue)
    return jiahuoTrue,jiahuoFlase


def getwordlist(datasetTrue,datasetFlase):
    s = set()
    for i in datasetTrue:
        for w in i:
            s.add(w)
    for i in datasetFlase:
        for w in i:
            s.add(w)
    return s




# 執行評分過程
def run():
    jt,jf =data_gen()
    datasetTrue = [jieba.lcut(d) for d in jt]
    datasetFlase = [jieba.lcut(d) for d in jf]
    word = "物流"
    s = getwordlist(datasetTrue, datasetFlase)
    dict = {}
    for word in s:


        dict[word] = chisquare(datasetTrue, datasetFlase, word)
        if dict[word]>0.01:
            print(word,dict[word])
    pass




if __name__ == '__main__':
    run()
    print("end")

相關推薦

檢驗 分類實現

import jieba import numpy as np import xlrd import re import json # 資料載入 # jieba詞庫設定 #讀取文字,讀取其中1個 #統計包含a的單詞和不包含a的單詞 #統計主題 def chisquare(d

特徵選擇——檢驗(使用Python sklearn進行實現)

在看這篇文章之前,如果對卡方檢驗不熟悉,可以先參考:卡方檢驗 Python有包可以直接實現特徵選擇,也就是看自變數對因變數的相關性。今天我們先開看一下如何用卡方檢驗實現特徵選擇。 1. 首先import包和實驗資料: from sklearn.feature_selecti

分佈與檢驗------以及python的實現

經典的卡方檢驗是檢驗定性自變數對定性因變數的相關性。假設自變數有N種取值,因變數有M種取值,考慮自變數等於i且因變數等於j的樣本頻數的觀察值與期望的差距,構建統計量:   這個統計量的含義簡而言之就是自變數對因變數的相關性。用feature_selection庫的SelectKBest類

檢驗和互信息

其中 學習 learn 介紹 ear div 合計 應該 python實現 在機器學習中,特征選擇主要有兩個目的: 1. 減少特征數量,提高訓練速度 2. 減少噪聲特征從而提高模型在測試集上的準確率。一些噪聲特征會導致模型出現錯誤的泛化,容易產生overfittin

數學知識點查漏補缺(分布與檢驗

檢驗 element 影響 body protect 兩個 ram -m style 一、卡方分布 若k個獨立的隨機變量Z1,Z2,?,Zk,且符合標準正態分布N(0,1),則這k個隨機變量的平方和,為服從自由度為k的卡方分布。 卡方分布之所以經常被利用到,是因為對符合正態

ch2. 交叉表做檢驗

spss中交叉分析主要用來檢驗兩個變數之間是否存在關係,或者說是否獨立,其零假設為兩個變數之間沒有關係。在實際工作中,經常用交叉表來分析比例是否相等。例如分析不同的性別對不同的報紙的選擇有什麼不同。 spss交叉表分析方法與步驟:  1、在spss中開啟資料,然後依次開啟:analyz

[bigdata-128] 檢驗是什麼

先用一個例子解釋卡方。 一個硬幣,正面是字,反面是花。拋20次,有11次是字,9次是花。根據這個丟擲結果,可否假設拋一次硬幣出現字和花的概率都是50%?驗證這個假設,就是卡方檢驗。 期望次數:假如認為子和花出現概率都是50%丟擲的理論次數。本例中,拋20次,如果字和花出現的概率相同,那麼它們

使用HOG+距離的方法實現圖片檢索(python寫)

在上一篇的文章中,使用HOG特徵提取了圖片的特徵,本篇文章則加上卡方距離的方法實現相似圖片的檢索。 前言 使用150張圖片,包括airplane、beach、desert、island和sea_ice各50張圖片進行測試。 第一步,獲取圖片特徵 獲取

Python資料預處理之---統計學的t檢驗檢驗以及均值,中位數等

Python資料預處理過程:利用統計學對資料進行檢驗,對連續屬性檢驗正態分佈,針對正態分佈屬性繼續使用t檢驗檢驗方差齊次性,針對非正態分佈使用Mann-Whitney檢驗。針對分類變數進行卡方檢驗(涉及三種卡方的檢驗:Pearson卡方,校準卡方,精準卡方)等。

Python統計分析-檢驗

卡方檢驗是一種用途很廣的計數資料的假設檢驗方法。它屬於非引數檢驗的範疇,主要是比較兩個及兩個以上樣本率( 構成比)以及兩個分類變數的關聯性分析。其根本思想就是在於比較理論頻數和實際頻數的吻合程度或擬合優度問題。 卡方檢驗的基本思想: 卡方檢驗是以χ2\chi^2

白話“檢驗

什麼是卡方檢驗 卡方檢驗是假設檢驗的一種,用於分析兩個類別變數的相關關係,是一種非引數假設檢驗,得出的結論無非就是相關或者不相關,所以有的教材上又叫“獨立性檢驗”,所以如果不是很清楚假設檢驗的朋友們,要好好複習一下假設檢驗了。提起假設檢驗,會扯出一堆東西,這裡我

檢驗值轉換為P值

卡方檢驗作為一種常見的假設檢驗,在統計學中的地位是顯而易見的,如果你還不太清楚可以參看這篇博文:卡方檢驗用於特徵選擇,寫的非常的淺顯易懂,如果你還想再擴充套件點卡方檢驗方面的知識,可以參看這篇博文卡方檢驗基礎,寫的也很有意思。前輩的功底都很深厚,小弟就就不再闡述卡方檢驗

SPSS:T檢驗差分析、非參檢驗檢驗的使用要求和適用場景

一、T檢驗 1.1 樣本均值比較T檢驗的使用前提 正態性;(單樣本、獨立樣本、配對樣本T檢驗都需要) 連續變數;(單樣本、獨立樣本、配對樣本T檢驗都需要) 獨立性;(獨立樣本T檢驗要求) 方差齊性;(獨立樣本T檢驗要求) 1.2 樣本均值比較T

檢驗思想及其應用

卡方檢驗是以χ2分佈為基礎的一種常用假設檢驗方法,它的無效假設H0是:觀察頻數與期望頻數沒有差別。   該檢驗的基本思想是:首先假設H0成立,基於此前提計算出χ2值,它表示觀察值與理論值之間的偏離

機器學習特徵選擇之檢驗與互資訊

by wangben  @ beijing 特徵選擇的主要目的有兩點: 1.      減少特徵數量提高訓練速度,這點對於一些複雜模型來說尤其重要 2.      減少noisefeature以提高模型在測試集上的準確性。一些噪音特徵會導致模型出現錯誤的泛化(genera

python 檢驗原理及應用

卡方檢驗,或稱x2檢驗。 無關性假設: 假設我們有一堆新聞或者評論,需要判斷內容中包含某個詞(比如6得很)是否與該條新聞的情感歸屬(比如正向)是否有關,我們只需要簡單統計就可以獲得這樣的一個四格表: 組別 屬於正向 不屬於正向 合計 不包含

機器學習中的數學(8)——檢驗原理及應用

卡方檢驗原理及應用 什麼是卡方檢驗 卡方檢驗是一種用途很廣的計數資料的假設檢驗方法。它屬於非引數檢驗的範疇,主要是比較兩個及兩個以上樣本率( 構成比)以及兩個分類變數的關聯性分析。其根本思想就是在於比較理論頻數和實際頻數的吻合程度或擬合優度問題。 無關

檢驗文字特徵選擇

關於卡方檢驗,下面這篇blog介紹的比較詳細,仔細思索之後,對一些點做如下說明,個人理解: 1. 關於假設“詞t與類別c無關”。這個假設應該變更為“詞t不是對分類有區分度的特徵”,(c是一個類別,除了c之外的所有資料組成另一個類別,類似邏輯迴歸多分類的方法)。一個詞的卡方檢驗值高,並不能說明詞一定與t強相關,

檢驗用於特徵選擇

卡方檢驗是特徵選擇中常用的演算法之一。 (1)      卡方分佈(chi-square distribution): 定義:若k個獨立的隨機變數z1,z2,…,zk,並且符合標準正太分佈N(0,1), 則這k個隨機變數的平方和 為服從自由度為k的卡方分佈,記為:x~x2(

分佈(Chi-squared Distribution)與檢驗(Chi-square Test)

卡方分佈 概念: 具有k個自由度的卡方分佈是一個由k個獨立標準正態隨機變數的和所構成的分佈。卡方分佈經常用於我們常見的卡方檢驗中。卡方檢驗一方面可以用來衡量觀測分佈和理論分佈之間的擬合程度,另一方面也可以測量定性資料兩個分類標準間的獨立性。 定義: 如果,,...,是