Saturday, March 26, 2016
Hibernate简介
http://blog.csdn.net/liujiahan629629/article/details/21442607
Lazy Loading:就是当load一个parent时候并不load其children当其后需要到children的信息再load它lazy loading
session是打开一个query窗口,是一级缓存(查询结果存在内存),只有session close才会释放缓存
sessionFactory是存所有session,是二级缓存(查询结果存在内存)
hibernate.cfg.xml是config hibernate
*.hbm.xml是每一个class和table的映射config
xml可以写程序动态加入xml string,不一定需要预先有xml文件
query.list()对数据全取
query.iterate()对数据全取Id,但需要到其他fields才取所以是N+1 query(N+1问题)
为了适应其他不同需求hibernate还提供HQL[不定参数查询](session.createQuery("FROM Student s where s.sname like ?"))和QBC(cra.add(Restrictions.like("sname", "%s%")))语言
Hibernate包括悲观锁(锁一直加上,性能较低)和乐观锁(数据读写冲突时才加上)
hibernate.cfg.xml:
<propertynamepropertyname="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>支持list一级与二级缓存
User.hbm.xml:
<id name="pid" column="pid">
<generator class="identity"/>
</id>
id是Hibernate给的主键,跟table的主键没有任何关系,给了id以后可以调用函数session.get(id). 如果不写generator,就是用用户给的值,如果给出identity就是用自增值。
NHibernate
NHibernate official
我工作的公司用到了NHibernate,设计者将session设计为singleton导致了一个大型程序越跑越慢,原因session一直在缓存越来越多查询。解决方法1. 每个查询new一个session不要singleton。2. sessionFactory.OpenStatelessSession()(.Net中)
Monday, March 21, 2016
matplotlib简介
all classifiers
plot decision tree for Iris
svm for Iris
multiclass SGD for Iris
Decision tree的展示可以用sklearn生成dot文件,然后用Graphviz打开
plot decision tree for Iris
svm for Iris
multiclass SGD for Iris
Decision tree的展示可以用sklearn生成dot文件,然后用Graphviz打开
Sunday, March 20, 2016
NumPy简介
X[:, 0]表示所有行第一列。第一个参数表示行,第二个参数表示列
Python indexing
http://blog.csdn.net/mokeding/article/details/17476979
Python indexing
http://blog.csdn.net/mokeding/article/details/17476979
朴素贝叶斯分类器Native Bayes classifier之Python实现
这篇博文主要是讨论用scikit-learn这个包里面的Native Bayes(NB)算法去对数据进行分类。NB主要有3种模型:高斯、多项式、伯努利。下面主要讨论高斯。这个算法有几个主要函数:fit函数是用训练数据特征值X和输出目标Y训练模型fit(X, Y),predict函数是根据测试数据特征值计算出输出目标Y2=predict(X2)
第一个例子是scikit-learn官网,数据是假设的
import numpy as np
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
Y = np.array([1, 1, 1, 2, 2, 2])
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
clf.fit(X, Y)
print(clf.predict([[-0.8, -1]]))
第二个例子也是来自于scikit-learn官网,数据是鸢尾花的分类,数据总共150个,每种花有50个数据,总共有3种类型。程序用全部数据用作训练,再用全部数据用于测试,然后比较结果。运行后准确率达到96%.
from sklearn import datasets
iris = datasets.load_iris()
print(iris.data)
print(iris.target)
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)
print("Number of mislabeled points out of a total %d points : %d" % (iris.data.shape[0],(iris.target != y_pred).sum()))
第三个例子是经过我修改第二个例子而成,我用60%作为training, 40%用作testing,最后得到test data的准确率达到96.7%.
import numpy as np
from sklearn import datasets
iris = datasets.load_iris()
train = np.vstack((iris.data[:30], iris.data[50:80], iris.data[100:130]))
test = np.vstack((iris.data[30:50], iris.data[80:100], iris.data[130:]))
trainTarget = np.hstack((iris.target[:30], iris.target[50:80], iris.target[100:130]))
testTarget = np.hstack((iris.target[30:50], iris.target[80:100], iris.target[130:]))
print(train.shape[0])
print(test.shape[0])
print(trainTarget.shape[0])
print(testTarget.shape[0])
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
y_pred = gnb.fit(train, trainTarget).predict(test)
print("Number of mislabeled points out of a total %d points : %d" % (test.shape[0],(testTarget != y_pred).sum()))
第一个例子是scikit-learn官网,数据是假设的
import numpy as np
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
Y = np.array([1, 1, 1, 2, 2, 2])
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
clf.fit(X, Y)
print(clf.predict([[-0.8, -1]]))
第二个例子也是来自于scikit-learn官网,数据是鸢尾花的分类,数据总共150个,每种花有50个数据,总共有3种类型。程序用全部数据用作训练,再用全部数据用于测试,然后比较结果。运行后准确率达到96%.
from sklearn import datasets
iris = datasets.load_iris()
print(iris.data)
print(iris.target)
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)
print("Number of mislabeled points out of a total %d points : %d" % (iris.data.shape[0],(iris.target != y_pred).sum()))
第三个例子是经过我修改第二个例子而成,我用60%作为training, 40%用作testing,最后得到test data的准确率达到96.7%.
import numpy as np
from sklearn import datasets
iris = datasets.load_iris()
train = np.vstack((iris.data[:30], iris.data[50:80], iris.data[100:130]))
test = np.vstack((iris.data[30:50], iris.data[80:100], iris.data[130:]))
trainTarget = np.hstack((iris.target[:30], iris.target[50:80], iris.target[100:130]))
testTarget = np.hstack((iris.target[30:50], iris.target[80:100], iris.target[130:]))
print(train.shape[0])
print(test.shape[0])
print(trainTarget.shape[0])
print(testTarget.shape[0])
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
y_pred = gnb.fit(train, trainTarget).predict(test)
print("Number of mislabeled points out of a total %d points : %d" % (test.shape[0],(testTarget != y_pred).sum()))
第四个例子改用train_test_split函数分割training and testing data
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4)
gnb = GaussianNB()
y_pred = gnb.fit(X_train, y_train).predict(X_test)
score = gnb.score(X_test, y_test)
print("Number of mislabeled points out of a total %d points : %d, score: %f" % (X_test.shape[0],(y_test != y_pred).sum(),score))
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4)
gnb = GaussianNB()
y_pred = gnb.fit(X_train, y_train).predict(X_test)
score = gnb.score(X_test, y_test)
print("Number of mislabeled points out of a total %d points : %d, score: %f" % (X_test.shape[0],(y_test != y_pred).sum(),score))
Saturday, March 19, 2016
Git简介
Git和SNV最大的区别是Git多一个repository在local,这样如果check-in到prod的话可以现在local做好code review再push,还可以对自己的各个改动做备份(local SVN本地版本管理)。

git pull
git checkout -b issue 1
git commit
git rebase -i HEAD~2
git pull (in mainline)
git rebase mainline (in issue1)
git merge issue1 (in mainline)
git push
git branch -d issue1
开始一个项目/bug时,都要习惯做git pull,否则可能会出现unexpected逻辑问题由于别人代码没有进入
这个表格覆盖了一个code改动的流程,包括branch、commit、pull、rebase、merge、push六个大步骤。绿色是最常用命令,黄色是对应上行的逆操作。staging时候分支代码都一样,只有commit以后代码才会不同。
git checkout -b issue3
git commit -m ""
git checkout mainline
git merge issue3
git push
这个实践很好,如果这段过程中mainline没有push的话,也仍是一条直线。但如果有commit0时候,自己的分支有两个commit(由于code review中不断改动产生多次commit),merge过程就产生一个merge point(不是任何一个checkin point,issue3这个分支push了)。最大缺点是issue3的历史记录不在mainline上不好查看而且不能删除。
引入rebase既可以合并多次commit成一个还可以只出现主干。rebase就是在commit和merge之间加入一步,将最新的remote端代码更新到分支,也叫分支的base改到最新了,所以叫rebase。rebase时候,git会将mainline的改动按步骤一个commit by一个commit将merge到分支。resolve conflict过程会看到分支的最新代码没有出现是因为working on最初的commit,所以只要管好conflict即可,不用理其他代码。
利用bitBucket作为remote repository. 下载TortoiseGit作为client, TortoiseGit需要下载Git.exe
然后右击Git Clone(=SVN checkout) ,如果这个选项没出现就按着shift键才右击即可,然后输入bitbucket中的clone url,文件夹一定要为空。然后创建一个文件,就要commit并且push. commit表示代码写入local repository, push表示写入到remote server

ref: https://www.youtube.com/watch?v=YC6zraqIooM

工作流程
git pull
git checkout -b issue 1
git commit
git rebase -i HEAD~2
git pull (in mainline)
git rebase mainline (in issue1)
git merge issue1 (in mainline)
git push
git branch -d issue1
开始一个项目/bug时,都要习惯做git pull,否则可能会出现unexpected逻辑问题由于别人代码没有进入
Git commnds:
git fetch origin remoteBranch git checkout remoteBranch | 下载remote端的分支(非mainline) | |
git stach save git stach pop | 暂存改动,使得没有unstaged文件 恢复暂存的改动 | |
git pull | 开始一个issue时,都要先做此步 | |
git log | 查看本分支commit历史记录(从新到老排序) | |
branch | git branch | 显示所有分支 |
branch | git branch issue1 | 创建issue1的分支,与mainline基点一致 |
branch | git checkout -b issue1 | 创建且切换到issue1分支 |
git status | 查看在哪个分支,与origin/mainline(remote端)比ahead了几个commit,文件状态(增改删)。Commit后不显示文件状态 | |
commit | git diff (test.java) git diff abcd fghi git diff -z --name-only abcd fghi | 查看所有/单个文件与上次commit的不同,git add后不会显示diff。还可以比较两个版本所有代码的异同。最后可以只查看修改的文件名 |
commit | git checkout abcd Test.java | revert一个unstaged文件,abcd是commit id从git log可得 |
commit | git reset --hard abcd | revert所有文件(unstaged/staged),abcd是commit id从git log可得 |
commit | git add (test.java/*.java) | commit前加入到index,任何添加修改都需要git add。之后gitstatus这些文件由红变绿(staged) |
commit | git reset (test.java/*.java) | git add的逆操作 |
commit | git reset --hard | 撤销git add的所有文件 |
commit | git clean -dfx | 删除新加且unstaged的所有文件 |
commit | git commit -m
"add a log" git commit --amend | 执行前先做git status确保分支和修改文件正确。amend修改log最近提交的信息。 |
commit | git reset --soft HEAD~ | 撤掉git commit,文件仍在git add后状态(staged) |
commit | git reset HEAD~ | 撤掉一个git commit(多个用HEAD~n),文件仍在git add前状态(unstaged) |
commit | post-review --parent mainline -r 12345 | 提交review,-r可以保证多次commit仍然是同一个code review。如果是mainline可以post-review -r |
rebase | git rebase -i HEAD~3 shift zz to save | 先在分支合并commit,3表示合并3个commit。如果在mainline执行这个操作,git将会把分支上各个commit合并到分支,可能需要resolve每个commit,非常没必要。 合并多个commit为一个,且汇总commit信息。把除第一行的pick改为s(squash)变成一个commit代码,下一页修改commit信息,shift+D删除全行。命令可加上issue1表示对此分支修改commit。若在主干,则执行 git rebase -i |
pull | git checkout mainline | 切换到mainline更新最新代码 |
pull | git pull | 从remote端下载最新代码到mainline |
rebase | git checkout issue1 | 先切换到issue1,再执行rebase |
rebase | git rebase mainline | 先切换到issue1,再执行rebase。如果出现error,就到有冲突的文件解决冲突 |
rebase | git add Test.java | rebase后再add存在冲突的文件 |
rebase | git rebase --continue | rebase状态下的git commit |
rebase | git log | 此时会见到remote端的改动出现在log中 |
merge | git checkout mainline | 转换分支mainline或issue1 |
merge | git merge issue1 | 先切换到mainline,把issue1分支并入到mainline |
push | git push | push前要先build一下。push到remote端 |
push | git branch -d issue1 | push后删除,不要重用 |
git cherry-pick abcd | 从某个commit引入到该分支,因id在各分支中唯一 | |
git revert abcd | 撤销某个commit,会在commit msg加revert。cherry-pick的反操作,cherry-pick是引入新的commit,而revert是取消目前分支的某个commit。 | |
git blame Test.java | 打印某一个文件的历史commit,可以快速找到引致错误文件的commit然后git revert | |
git stash save | 将未commit的临时改动存入stash,以方便revert而不丢失代码 | |
git stash pop | 将stash的改动恢复到workspace |
这个表格覆盖了一个code改动的流程,包括branch、commit、pull、rebase、merge、push六个大步骤。绿色是最常用命令,黄色是对应上行的逆操作。staging时候分支代码都一样,只有commit以后代码才会不同。
其他命令:
bisect:二分法(端点为good和bad)找到导致错误的commit,需要手动标记此版本好还是坏,git决定在哪个区间继续搜。Rebase:
Git可以在local repository创建多个分支。mainline是server的分支。比较好的操作是创建一个分支用于修改自己的改动,再merge到mainline。git checkout -b issue3
git commit -m ""
git checkout mainline
git merge issue3
git push
这个实践很好,如果这段过程中mainline没有push的话,也仍是一条直线。但如果有commit0时候,自己的分支有两个commit(由于code review中不断改动产生多次commit),merge过程就产生一个merge point(不是任何一个checkin point,issue3这个分支push了)。最大缺点是issue3的历史记录不在mainline上不好查看而且不能删除。
引入rebase既可以合并多次commit成一个还可以只出现主干。rebase就是在commit和merge之间加入一步,将最新的remote端代码更新到分支,也叫分支的base改到最新了,所以叫rebase。rebase时候,git会将mainline的改动按步骤一个commit by一个commit将merge到分支。resolve conflict过程会看到分支的最新代码没有出现是因为working on最初的commit,所以只要管好conflict即可,不用理其他代码。
gitignore:
.gitignore文件加入如下:可忽略这些文件永远不会checkin
*.pyc
.idea/
git-config
git config --global commit.template ~/a.txt
git commit (not git commit -m "")
vim ~/.gitconfig to change name
TortoiseGit
利用bitBucket作为remote repository. 下载TortoiseGit作为client, TortoiseGit需要下载Git.exe
然后右击Git Clone(=SVN checkout) ,如果这个选项没出现就按着shift键才右击即可,然后输入bitbucket中的clone url,文件夹一定要为空。然后创建一个文件,就要commit并且push. commit表示代码写入local repository, push表示写入到remote server
每次push都输入git url
Friday, March 18, 2016
TeamCity简介
https://www.youtube.com/watch?v=td0bV2zu5rw
https://www.youtube.com/watch?v=w8tvDSCN2AE
http://www.cnblogs.com/WilsonWu/archive/2013/05/22/3092584.html
Run as a System account
https://www.youtube.com/watch?v=w8tvDSCN2AE
http://www.cnblogs.com/WilsonWu/archive/2013/05/22/3092584.html
Run as a System account
Tuesday, March 8, 2016
Apriori
C set: candidate set
L set: large-item set
C set->L set
frequent set=L set
Python程序思路:
L2->C3
union的所有组合: ABC, ACBE, ACE, BCE
首先个数要为3个,所以ACBE去掉只剩下三组就是C3
但是据权威参考资料,C3直接是BCE, 因为C3中的任两两元素都应为large(L2里面), 所以ABC, ACE直接不能进入C3
如果计算关联规则:
Python 程序思路:
所有L set包括其support数值存于dict中如A 0.5, B 0.75....BCE 0.5
然后对每一个frequent item=L set做如下:
frequent item的support值/该frequent item所有子集(不包括自己)如BCE就是B,C,E,BC,BE,CE,BCE,如果该子集的除法满足Min confidence,
规则为该子集=>frequent item-该子集。如
P(BCE/B) or count(BCE)/count(B)=0.5/0.75=0.67>0.6(min confidence). 就有B=>CE
P(BCE/C)=0.5/0.75 就有C=>BE
原理:(网球拍例子)确定了frequent set(BCE)之后,这就是确定了support也就是confidence置信度(条件概率)中的分子部分
P([BCE]/P(X))=0.6(min confidence)
http://blog.csdn.net/fufengrui/article/details/16342425
https://www.zhihu.com/question/22590018
http://blog.csdn.net/wyc09/article/details/16860923
Python简介
语法:
literals包括set literals, directory literals, list literals
大括号包括set/directory
a={}
a={'a','b'}
a={'a': 42,'b':81}
中括号表示list
alist = ['foo', 'bar', 'bar']
empty_list = []
开发环境:
可以用eclipse进行开发
IPython
安装包:
numpy: array 类(实现matrix类的基础)-1.10.4
scipy:数值计算。做矩阵计算,算特征值,算积分,算微分方程。用pip安装的时候一般出现缺少C++包的问题,解决方案请看WinPython
scikit-learn包括朴素贝叶斯
pandas读数据非常快
Matplotlib
方法一WinPython:这个软件包括Ipython, Pandas, Scikit-learn(自然包括numpy, scipy), Python GUI. 或者导入Eclipse,这样在Eclipse也可以用scipy这些包
方法二pip:
python 3.3.以上pip(8.1.1)自带,不需安装只需运行如下:
python -m pip install numpy
python -m pip install scipy
测试:
from numpy import *
from scipy import *
from sklearn import svm
还有一些常用的工具
Orange data mining
Unable to find vcvarsall.bat
python -m pip install -U pip
pip install -U setuptools
pip install -U virtualenv
Sunday, March 6, 2016
C#之OOD
http://blog.csdn.net/hliq5399/article/details/6305335
http://www.cnblogs.com/max007super/archive/2009/02/09/1386980.html
http://www.cnblogs.com/weihai2003/archive/2008/10/24/1319003.html
http://stackoverflow.com/questions/1327544/what-is-the-equivalent-of-javas-final-in-c/1327549#1327549
http://www.cnblogs.com/chenssy/p/3388487.html
http://www.cnblogs.com/max007super/archive/2009/02/09/1386980.html
http://www.cnblogs.com/weihai2003/archive/2008/10/24/1319003.html
http://stackoverflow.com/questions/1327544/what-is-the-equivalent-of-javas-final-in-c/1327549#1327549
http://www.cnblogs.com/chenssy/p/3388487.html
Subscribe to:
Posts (Atom)