求有限稀释法(limiting dilution analysis,LDA)具体步骤

求有限稀释法(limiting dilution analysis,LDA)具体步骤,第1张

有限稀释法是一种常用的克隆方法。

将需要再克隆的细胞株自培养孔内吸出并作细胞计数,计出1mL的细胞数。

用HT培养液稀释, 使细胞浓度为50~60个/mL,于96孔培养板中每孔加0.1mL(五六个细胞/孔)。

接种2排,剩余细胞悬液用HT培养液作倍比稀释,再接种2排,如此类推,直至使每孔含0.5~1个细胞。

培养7~10d后,选择单个克隆生长的阳性孔再一次进行克隆。一般需要如此重复3~5次,直至达100%阳性孔率时即可,以确保抗体由单个克隆所产生。

例如:

实验细胞克隆化培养技术—有限稀释法

一、实验目的:

1、掌握用有限稀释法进行细胞克隆化培养技术; 2、学会细胞克隆形成的辩观察技能;

3、配合抗体分泌细胞筛选技术,确定抗体分泌细胞。 二、实验原理:

克隆化培养即单细胞培养技术,用有限稀释法进行杂交瘤细胞克隆化培养,可以及时确定阳性杂交瘤细胞株,同时淘汰因发生染色体丢失或抗体的轻、重链基因分离而出现无抗体分泌阴性细胞株。

一般杂交瘤细胞需经过52—3次反复克隆后,才能达到100%细胞阳性率。

该办法亦适用于一般细胞培养中的细胞纯化、突变细胞株的选择,识别和分离。是细胞株的常用方法。

三、实验材料:

杂交瘤细胞、25毫升培养瓶、96孔细胞培养板(天津有机玻璃厂)、移液管(1毫升、5毫升、10毫升)、弯头滴管、倒置显微镜、CO2培养箱、白细胞计数板、计数器、盖玻片、防水笔、RPMI-1640、小牛血清、青链霉素、10毫升刻度离心管,00橡胶塞,饲养细胞(3-6×105/ml、见腹腔细胞的制备)。

四、实验步骤:

1、分装了每孔0.1毫升腹腔细胞的96孔细胞培养板(可提前24小时准备就绪,置CO2培养箱中备用);

2、自细胞培养瓶中收集长势良好的杂交瘤细胞(亦可自24孔培养板孔中收集),制成悬液。

3、按白细胞计数方法准确计得细胞悬液的细胞数,一般在105/毫升左右。

4、取3支10毫升刻度离心管排列在超净工作台试管架上,先用无血清培养基将细胞稀释至103/毫升,再用含15%小牛血清的完全培养基稀释到101/毫升细胞,即每0.1毫升1个细胞。

5、每孔0.1毫升细胞悬液。

6、置37℃5%CO2培养箱,4天后取出观察,并在板盖上打上标记,做好记录并统计结果。

7、继续培养时,则在第4-5天更换1/2培养基,约第7-9天可以收获培养液上清用于检测抗体。并重复检测1-2次。

8、选择单克隆生长孔,生长良好,阳性强者,转移到24孔板再做克隆经培养或扩大培养。

五、实验结果:

实验结果以总细胞孔(如96孔)中出现克隆孔统计出克隆百分率,并可进一步按单细胞孔、双细胞孔、多细胞孔分别计算出百分率。

六、注意事项:

1、注意无菌 *** 作,一旦发现污染(孔)必须及时处理;

2、计数细胞要求准确,稀释量亦要准确,否则将造成一孔多细胞克隆或克隆百分离太低;

3、在计数克隆出现率之前,不宜更换培养液,也不宜强烈振动培养板; 4、做克隆化培养的小牛血清必须是优质血清;

5、若做克隆抗体检测时,特别要保护细胞的生长状况,防止细胞生长不良甚至丢失。 七、说明:

哺乳动物细胞通过分离、稀释接种,培养在适宜于单细胞生长的培养液中,形成细胞克隆。运用这项技术可以制作细胞成活曲线,即在接种相同数量细胞的培养瓶中,加入不同浓度的化学药品,或照以不同剂量的射线,观察其对细胞的听见害程度。由此可以在哺乳类细胞中进行诱变试验及分离突变细胞。

LDA是监督学习的降维、分类技术,可以用一句话概括思想:投影后类内方差最小,类间方差最大。

如下图所示,给定数据样例集,设法将样例投影到直线上,使得同类样例投影点尽可能近、异类样例的投影点尽可能远离:

下图的两种投影方式,那一种满足我们的标准?

右图,原因是投影后,蓝色和红色数据各自较为集中,且类别之间的距离明显。(左图在边界处数据混杂

LDA如何用来分类?

在对新的样本进行分类时,将其投影到同样的投影线上,再根据投影点的位置来确定样本的类别。

目标:求解投影向量 ​ ,二维情况下​ , ​

​,shape:(2,m)表示样本矩阵,即2个维度,m个样本。每一列表示一个样本,每一行表示该样本在这一维度上的取值。例如: ​中的第一列表示第一个样本在第一个维度上的取值​,在第二个维度上的取值为​,以此类推。

对第​个样本 ​:​

图中的y可计算,对于样本在投影向量上的投影结果的值为: ​,​ 可以理解为这条过原点直线的单位方向向量,​ 为 的夹角。

给定两个类别:

X1 : shape:(m,2)一般将样本按行排列,每列表示维度,可以理解为 ​的转置,表示m个样本,2两个维度,图中每个点表示

X2 :    描述同X1

均值向量 ​: shape:(2,1) 将m个样本取每个维度的均值,按列排列,得到均值均值向量​ 

协方差矩阵 ​: ​ shape:(2,2) (维度x维度)

样本中心在直线上的投影 ​ :shape:(1,2)x(2,1)= (1,1)常量

同类样本投影点的协方差: ​:shape:(1,2)x(2,2)x(2,1) = (1,1)常量 ,表示将同类样本投影后,两个维度的协方差。

对于n维情况,由于我们是多维向低维投影,则此时投影到的低维空间就不是一条直线,而是一个超平面了。假设我们投影到的低维空间的维度为d,对应的基向量为 ​,基向量组成的矩阵为​

此时同类样本投影点的协方差 ​  shape: (d,n)x(n,n)x(n,d)=(d,d) ,表示投影后dxd的协方差矩阵。

程序

输入:数据集 ,​,其中任意样本​ 为n维向量,​ 为样本对应的标签,降维到的维度d。

输出:降维后的样本集​

1) 计算类内散度矩阵​

2) 计算类间散度矩阵​

3) 计算矩阵​

4) 计算​的 最大的​ 个特征值对应的​个特征向量 ​,得到投影矩阵​

5) 对样本集中的每一个样本特征 ​,转换为新的样本​

6) 得到输出样本集​

实际上LDA除了可以用于降维以外, 还可以用于分类 。一个常见的LDA分类基本思想是假设各个类别的样本数据符合高斯分布,这样利用LDA进行投影后,可以利用极大似然估计计算各个类别投影数据的均值和方差,进而得到该类别高斯分布的概率密度函数。 当一个新的样本到来后,我们可以将它投影,然后将投影后的样本特征分别带入各个类别的高斯分布概率密度函数,计算它属于这个类别的概率,最大的概率对应的类别即为预测类别 。

相同点:

1)两者均可以对数据进行降维。

2)两者在降维时均使用了矩阵特征分解的思想。

3)两者都假设数据符合高斯分布

不同点

1.LDA是有监督的降维方法,而PCA是无监督的降维方法n

2.LDA降维最多降到类别数k-1的维数,而PCA没有这个限制。

3.LDA除了可以用于降维,还可以用于分类。

4.LDA选择分类性能最好的投影方向,而PCA选择样本点投影具有最大方差的方向。这点可以从下图形象的看出,在某些数据分布下LDA比PCA降维较优。

当然,某些某些数据分布下PCA比LDA降维较优,如下图所示:

以下是LDA的m文件函数:

你稍稍改改就能用了!

function [eigvector, eigvalue, elapse] = LDA(gnd,options,data)

% LDA: Linear Discriminant Analysis

%

% [eigvector, eigvalue] = LDA(gnd, options, data)

%

% Input:

% data - Data matrix. Each row vector of fea is a data point.

% gnd - Colunm vector of the label information for each

% data point.

% options - Struct value in Matlab. The fields in options

% that can be set:

%

%Regu - 1: regularized solution,

%a* = argmax (a'X'WXa)/(a'X'Xa+ReguAlpha*I)

% 0: solve the sinularity problem by SVD

% Default: 0

%

% ReguAlpha - The regularization parameter. Valid

% when Regu==1. Default value is 0.1.

%

%ReguType - 'Ridge': Tikhonov regularization

% 'Custom': User provided

% regularization matrix

% Default: 'Ridge'

%regularizerR - (nFea x nFea) regularization

% matrix which should be provided

% if ReguType is 'Custom'. nFea is

% the feature number of data

% matrix

%Fisherface - 1: Fisherface approach

% PCARatio = nSmp - nClass

% Default: 0

%

%PCARatio - The percentage of principal

%component kept in the PCA

%step. The percentage is

%calculated based on the

%eigenvalue. Default is 1

%(100%, all the non-zero

%eigenvalues will be kept.

%If PCARatio >1, the PCA step

%will keep exactly PCARatio principle

%components (does not exceed the

%exact number of non-zero components).

%

%

% Output:

% eigvector - Each column is an embedding function, for a new

% data point (row vector) x, y = x*eigvector

% will be the embedding result of x.

% eigvalue - The sorted eigvalue of LDA eigen-problem.

% elapse- Time spent on different steps

%

%Examples:

%

% fea = rand(50,70)

% gnd = [ones(10,1)ones(15,1)*2ones(10,1)*3ones(15,1)*4]

% options = []

% options.Fisherface = 1

% [eigvector, eigvalue] = LDA(gnd, options, fea)

% Y = fea*eigvector

%

%

% See also LPP, constructW, LGE

%

%

%

%Reference:

%

% P. N. Belhumeur, J. P. Hespanha, and D. J. Kriegman, 揈igenfaces

% vs. fisherfaces: recognition using class specific linear

% projection,� IEEE Transactions on Pattern Analysis and Machine

% Intelligence, vol. 19, no. 7, pp. 711-720, July 1997.

%

% Deng Cai, Xiaofei He, Yuxiao Hu, Jiawei Han, and Thomas Huang,

% "Learning a Spatially Smooth Subspace for Face Recognition", CVPR'2007

%

% Deng Cai, Xiaofei He, Jiawei Han, "SRDA: An Efficient Algorithm for

% Large Scale Discriminant Analysis", IEEE Transactions on Knowledge and

% Data Engineering, 2007.

%

% version 2.1 --June/2007

% version 2.0 --May/2007

% version 1.1 --Feb/2006

% version 1.0 --April/2004

%

% Written by Deng Cai (dengcai2 AT cs.uiuc.edu)

%

if ~exist('data','var')

global data

end

if (~exist('options','var'))

options = []

end

if ~isfield(options,'Regu') | ~options.Regu

bPCA = 1

if ~isfield(options,'PCARatio')

options.PCARatio = 1

end

else

bPCA = 0

if ~isfield(options,'ReguType')

options.ReguType = 'Ridge'

end

if ~isfield(options,'ReguAlpha')

options.ReguAlpha = 0.1

end

end

tmp_T = cputime

% ====== Initialization

[nSmp,nFea] = size(data)

if length(gnd) ~= nSmp

error('gnd and data mismatch!')

end

classLabel = unique(gnd)

nClass = length(classLabel)

Dim = nClass - 1

if bPCA &isfield(options,'Fisherface') &options.Fisherface

options.PCARatio = nSmp - nClass

end

if issparse(data)

data = full(data)

end

sampleMean = mean(data,1)

data = (data - repmat(sampleMean,nSmp,1))

bChol = 0

if bPCA &(nSmp >nFea+1) &(options.PCARatio >= 1)

DPrime = data'*data

DPrime = max(DPrime,DPrime')

[R,p] = chol(DPrime)

if p == 0

bPCA = 0

bChol = 1

end

end

%======================================

% SVD

%======================================

if bPCA

if nSmp >nFea

ddata = data'*data

ddata = max(ddata,ddata')

[eigvector_PCA, eigvalue_PCA] = eig(ddata)

eigvalue_PCA = diag(eigvalue_PCA)

clear ddata

maxEigValue = max(abs(eigvalue_PCA))

eigIdx = find(eigvalue_PCA/maxEigValue <1e-12)

eigvalue_PCA(eigIdx) = []

eigvector_PCA(:,eigIdx) = []

[junk, index] = sort(-eigvalue_PCA)

eigvalue_PCA = eigvalue_PCA(index)

eigvector_PCA = eigvector_PCA(:, index)

%=======================================

if options.PCARatio >1

idx = options.PCARatio

if idx <length(eigvalue_PCA)

eigvalue_PCA = eigvalue_PCA(1:idx)

eigvector_PCA = eigvector_PCA(:,1:idx)

end

elseif options.PCARatio <1

sumEig = sum(eigvalue_PCA)

sumEig = sumEig*options.PCARatio

sumNow = 0

for idx = 1:length(eigvalue_PCA)

sumNow = sumNow + eigvalue_PCA(idx)

if sumNow >= sumEig

break

end

end

eigvalue_PCA = eigvalue_PCA(1:idx)

eigvector_PCA = eigvector_PCA(:,1:idx)

end

%=======================================

eigvalue_PCA = eigvalue_PCA.^-.5

data = (data*eigvector_PCA).*repmat(eigvalue_PCA',nSmp,1)

else

ddata = data*data'

ddata = max(ddata,ddata')

[eigvector, eigvalue_PCA] = eig(ddata)

eigvalue_PCA = diag(eigvalue_PCA)

clear ddata

maxEigValue = max(eigvalue_PCA)

eigIdx = find(eigvalue_PCA/maxEigValue <1e-12)

eigvalue_PCA(eigIdx) = []

eigvector(:,eigIdx) = []

[junk, index] = sort(-eigvalue_PCA)

eigvalue_PCA = eigvalue_PCA(index)

eigvector = eigvector(:, index)

%=======================================

if options.PCARatio >1

idx = options.PCARatio

if idx <length(eigvalue_PCA)

eigvalue_PCA = eigvalue_PCA(1:idx)

eigvector = eigvector(:,1:idx)

end

elseif options.PCARatio <1

sumEig = sum(eigvalue_PCA)

sumEig = sumEig*options.PCARatio

sumNow = 0

for idx = 1:length(eigvalue_PCA)

sumNow = sumNow + eigvalue_PCA(idx)

if sumNow >= sumEig

break

end

end

eigvalue_PCA = eigvalue_PCA(1:idx)

eigvector = eigvector(:,1:idx)

end

%=======================================

eigvalue_PCA = eigvalue_PCA.^-.5

eigvector_PCA = (data'*eigvector).*repmat(eigvalue_PCA',nFea,1)

data = eigvector

clear eigvector

end

else

if ~bChol

DPrime = data'*data

% options.ReguAlpha = nSmp*options.ReguAlpha

switch lower(options.ReguType)

case {lower('Ridge')}

for i=1:size(DPrime,1)

DPrime(i,i) = DPrime(i,i) + options.ReguAlpha

end

case {lower('Tensor')}

DPrime = DPrime + options.ReguAlpha*options.regularizerR

case {lower('Custom')}

DPrime = DPrime + options.ReguAlpha*options.regularizerR

otherwise

error('ReguType does not exist!')

end

DPrime = max(DPrime,DPrime')

end

end

[nSmp,nFea] = size(data)

Hb = zeros(nClass,nFea)

for i = 1:nClass,

index = find(gnd==classLabel(i))

classMean = mean(data(index,:),1)

Hb (i,:) = sqrt(length(index))*classMean

end

elapse.timeW = 0

elapse.timePCA = cputime - tmp_T

tmp_T = cputime

if bPCA

[dumpVec,eigvalue,eigvector] = svd(Hb,'econ')

eigvalue = diag(eigvalue)

eigIdx = find(eigvalue <1e-3)

eigvalue(eigIdx) = []

eigvector(:,eigIdx) = []

eigvalue = eigvalue.^2

eigvector = eigvector_PCA*(repmat(eigvalue_PCA,1,length(eigvalue)).*eigvector)

else

WPrime = Hb'*Hb

WPrime = max(WPrime,WPrime')

dimMatrix = size(WPrime,2)

if Dim >dimMatrix

Dim = dimMatrix

end

if isfield(options,'bEigs')

if options.bEigs

bEigs = 1

else

bEigs = 0

end

else

if (dimMatrix >1000 &Dim <dimMatrix/10) | (dimMatrix >500 &Dim <dimMatrix/20) | (dimMatrix >250 &Dim <dimMatrix/30)

bEigs = 1

else

bEigs = 0

end

end

if bEigs

%disp('use eigs to speed up!')

option = struct('disp',0)

if bChol

option.cholB = 1

[eigvector, eigvalue] = eigs(WPrime,R,Dim,'la',option)

else

[eigvector, eigvalue] = eigs(WPrime,DPrime,Dim,'la',option)

end

eigvalue = diag(eigvalue)

else

[eigvector, eigvalue] = eig(WPrime,DPrime)

eigvalue = diag(eigvalue)

[junk, index] = sort(-eigvalue)

eigvalue = eigvalue(index)

eigvector = eigvector(:,index)

if Dim <size(eigvector,2)

eigvector = eigvector(:, 1:Dim)

eigvalue = eigvalue(1:Dim)

end

end

end

for i = 1:size(eigvector,2)

eigvector(:,i) = eigvector(:,i)./norm(eigvector(:,i))

end

elapse.timeMethod = cputime - tmp_T

elapse.timeAll = elapse.timePCA + elapse.timeMethod


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11082920.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存