文档章节

2017年2月15日 Linear Discriminant Analysis

airxiechao
 airxiechao
发布于 2017/03/20 08:27
字数 267
阅读 23
收藏 0

Linear Discriminant analysis seeks a line that best separates two classes, coefficients of the line will be given by

Variable is classified as class 1 if

from __future__ import division
import numpy as np
import pandas as pd
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from pylab import scatter, show, legend, xlabel, ylabel

#prepare data
data = pd.read_csv('data/data_lda.csv')
X = data[['BUSAGE','DAYSDELQ']].as_matrix()
y = data['LABEL'].as_matrix()

# visualize data
def visualize(X, y):
    y1, y2 = np.unique(y)
    pos = np.where(y == y1)
    neg = np.where(y == y2)
    scatter(X[pos, 0], X[pos, 1], marker='o', c='b')
    scatter(X[neg, 0], X[neg, 1], marker='x', c='r')
    show()

visualize(X, y)

class myLinearDiscriminatAnalysis:
    #reference: http://www.saedsayad.com/lda.htm
    def fit(self, X, y):
        self.y1, self.y2 = np.unique(y)
        X1 = X[np.where(y==self.y1)]
        X2 = X[np.where(y==self.y2)]
        n1 = X1.shape[0]
        n2 = X2.shape[0]
        self.p1 = 1.0 * n1 / X.shape[0]
        self.p2 = 1.0 * n2 / X.shape[0]
        self.u1 = np.mean(X1, axis=0)
        self.u2 = np.mean(X2, axis=0)
        C1 = np.cov(X1, rowvar=False)
        C2 = np.cov(X2, rowvar=False)
        C = 1.0 / (n1+n2)* (n1*C1+n2*C2)
        self.beta = np.dot(np.linalg.inv(C), self.u1-self.u2)
        
    def predict(self, X):
        thr = np.log(self.p1 / self.p2)
        d = np.dot(X, self.beta)-np.dot((self.u1+self.u2)/2.0, self.beta)
        p = np.array([''] * X.shape[0])
        p[d>thr] = self.y1
        p[d<=thr] = self.y2
        return p
    
    def score(self, X, y):
        p = self.predict(X)
        return np.count_nonzero((y == p) == True) / y.shape[0]

lda = myLinearDiscriminatAnalysis()
lda.fit(X, y)
print 'score:', lda.score(X,y)
#score: 0.85

clf = LinearDiscriminantAnalysis()
clf.fit(X, y)
print 'scikit score:', clf.score(X,y)
#scikit score: 0.88

 

© 著作权归作者所有

airxiechao
粉丝 4
博文 42
码字总数 9717
作品 1
成都
程序员
私信 提问
特征工程的预处理

MNIST数据集 预处理(降维) https://www.kaggle.com/arthurtok/interactive-intro-to-dimensionality-reduction 解决"Curse ofDimensionality"问题 。if we are able toproject our data f......

ciyiquan5963
2017/11/08
0
0
降维算法中的线性判别方法LDA

线性判别分析(Linear Discriminant Analysis, LDA),有时也称Fisher线性判别(Fisher Linear Discriminant ,FLD), 这种算法是Ronald Fisher 于 1936年发明的,是模式识别的经典算法。在1996年...

necther
2018/04/13
0
0
史上最好的LDA(线性判别分析)教程

一、前言 最近由于研究需要,要用到线性判别分析(LDA)。于是找了很多资料来看,结果发现大部分讲的都是理论知识,因此最后还是看的一知半解,后来终于找到了个英文的文档,作者由PCA引入LDA...

jnulzl
2015/11/17
0
0
深度学习机器学习:softmax和log_softmax区分

softmax 函数 又称为 normalized exponential function:is a generalization of the logistic function that “squashes” a K-dimensional vector zof arbitrary real values to a K-dimens......

oldpan
2017/12/05
0
0
2017年上半年软考报名时间汇总(持续更新)

全国2017年上半年软考报名时间汇总(持续更新) 关注报名时间:各省报名开始时间、结束时间不一。 关注报考科目:部分科目一年只考核一次。 关注考试时间:上半年时间为5月20日,及时开始应试...

liuyiok
2017/02/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

教你玩转Linux—添加批量用户

添加和删除用户对每位Linux系统管理员都是轻而易举的事,比较棘手的是如果要添加几十个、上百个甚至上千个用户时,我们不太可能还使用useradd一个一个地添加,必然要找一种简便的创建大量用户...

xiangyunyan
23分钟前
6
0
返回提示信息,如:xxx创建成功!

【服务端】在输出的方法块中,加入要输出的字段(qcm_batch_id) QCMUserType.cs: public struct QCM_Custom_Create_Batch_Out_Tag { public BASCoreType.Cmn_Out_T......

_Somuns
23分钟前
5
0
Aliyun Serverless VSCode Extension v1.12.0 发布

Aliyun Serverless VSCode Extension 是阿里云 Serverless 产品 函数计算 Function Compute 的 VSCode 插件,该插件结合了函数计算 Fun 工具以及函数计算 SDK ,是一款 VSCode 图形化开发调试...

阿里云官方博客
24分钟前
6
0
程序员如何培养解决复杂问题的能力?

今天在上网时候,突然看到了这篇文章,感觉非常的适合现在的自己去思考下,可能也适用在座的读者。程序员不仅仅是敲代码,更是一个复合能力的结合体,也不仅仅停留在技术和代码阶段。你想要成...

哥本哈根的小哥
27分钟前
8
0
市场变化驱动产品思维升级

宜信科技中心财富管理产品部负责人Bob,与大家一起聊聊个性化推荐产品功能的设计和B端产品的功能策划方式。 拓展阅读:回归架构本质,重新理解微服务 智慧金融时代,大数据和AI如何为业务赋能...

宜信技术学院
28分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部