相同年时我们由几独人口的付出组织发展至十几人口之团,最初的我们只有零星只后端平加点儿只前端,而且内部老三独或实习生。
而是今时不可同日而语往日,现在咱们发前端、后端、测试、运维、设计、产品、交互,成功集合一起了七个兵种,可以召唤神龙,赐我们一个速的开销集团。
用作一个敏捷性的开团队,我们要维持高效的迭代速度之又确保高质量的代码,这是一个重的长河。

3、朴素贝叶斯分类去

故贝叶斯定理进行建模的督察上分类器。
下举个例,虽然是事例没有区分训练集和测试集,一般情形最好或别一下。

from sklearn.naive_bayes import GaussianNB

# 准备数据
input_file = 'data_multivar.txt'
X = []
y = []
with open(input_file, 'r') as f:
    for line in f.readlines():
        data = [float(x) for x in line.split(',')]
        X.append(data[:-1])
        y.append(data[-1])

X = np.array(X)
y = np.array(y)
# 建立朴素贝叶斯分类器
classifier_gaussiannb=GaussianNB()
classifier_gaussiannb.fit(X,y)
y_pre=classifier_gaussiannb.predict(X)
# 计算分类器的准确性
accuracy=100.0*(y==y_pre).sum()/X.shape[0]
print('结果:',accuracy)
# 画出数据和边界
plot_classifier(classifier_gaussiannb,X,y)

武装Github — ZenHub

ZenHub
Project management inside GitHub
Transform your GitHub issues

凑巧而Zenhub所说,这是一款项目管理工具,嵌入式集成到Github中。作为插件,它的UI完全迎合了Github,以至于你难以分别发出如何职能是Github的,哪些功效是Zenhub的。

使您用了ZenHub,它见面提供于你:

  1. 一如既往套任务面板,给不同之天职提供不同之泳道,直观的来得每个任务之速。于是乎我遗弃了Teambition。
  2. 同样模拟个人的Todo
    List
    ,如果来一个issue或者一个PR需要您来拍卖,但若现在从不拖欠,你可以拿它们上加到Todo
    List中,于是乎我而丢了Wunderlist。
  3. 平模仿花色图标和统计,结合着Github自带的型图表,这个提供更多维度的多寡,但是个人感觉意义不极端死。
  4. 再也加有有些彩蛋,由于其是作插件形式嵌入至Github中之,所以会见在群地方提供有如此那样的按钮,等正若失去发现了。

11、估算收入阶层

此间运用节能贝叶斯分类器。这里的法子以及第8省之均等,只是多了数字和字符串的混合编码,所以片代码注释可查上方第8节。

# 1、读取数据
input_file='adult.data.txt'
X=[]

countLess=0
countMore=0
countAll=20000

with open(input_file,'r') as f:
    for line in f.readlines():
        if '?' not in line:
            data=line[:-1].split(', ')
            # 2、若大部分点都属于同一个类型,则分类器会倾向于该类型,所以应该选出大于50k与小于等于50k各10000
            if data[-1]=='<=50K' and countLess<countAll:
                X.append(data)
                countLess=countLess+1
            elif data[-1]=='>50K' and countMore<countAll:
                X.append(data)
                countMore=countMore+1
            if countMore>=countAll and countLess>=countAll:
                break;

X=np.array(X)
from sklearn import preprocessing
# 3、对数据进行编码
label_encoder=[]
for i,item in enumerate(X[0]):
    if item.isdigit():
        X[:,i]=X[:,i]
    else:
        label_encoder.append(preprocessing.LabelEncoder())
        X[:,i]=label_encoder[-1].fit_transform(X[:,i])

y=X[:,-1].astype(int)
X=X[:,:-1].astype(int)
# 4、将数据分成训练和测试

from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.naive_bayes import GaussianNB
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=5)
# 5、训练数据
classifier_gaussiannb=GaussianNB()
classifier_gaussiannb.fit(X_train,y_train)
y_test_pred=classifier_gaussiannb.predict(X_test)
# 6、提取性能指标
f1=cross_val_score(classifier_gaussiannb,X,y,scoring='f1_weighted',cv=5)
print('f1:',str(round(f1.mean()*100,2))+'%')
# 7、预测新的值
input_data = ['39', 'State-gov', '77516', 'Bachelors', '13', 'Never-married', 'Adm-clerical', 'Not-in-family', 'White', 'Male', '2174', '0', '40', 'United-States']
count=0
input_data_encoder=[-1]*len(input_data)
for i,item in enumerate(input_data):
    if item.isdigit():
        input_data_encoder[i]=int(input_data[i])
    else:
        labels = []
        labels.append(input_data[i])
        input_data_encoder[i]=int(label_encoder[count].transform(labels))
        count=count+1

result=classifier_gaussiannb.predict(input_data_encoder)
result=label_encoder[-1].inverse_transform(result)
print('resutl:',result)

本子管理 — Git~hub

「开始之起,我们还是亲骨肉」(出自《北京路之生活》)

始发的上马,我们还是用着SVN,代码存储于合作社的服务器遭受,只发生一个分,提交代码无需对,无需单元测试。因为我们仅来几乎独人……

当一个发逼格的团伙,后来我们之所以上了Git,并且将代码迁移至Coding中失去,然后引入了名也「git
flow」的工作流,关于这个工作流可以参照我们蛮的篇章:「企业级支:Gitflow
Workflow工作流」

Coding真的是千篇一律慢慢悠悠好对的活,可称为业届良心。

缘何当初莫直接用Github,因为私出仓库贵呀……

可,作为一个起逼格的团队,我们是不见面满足吃之的。Coding自身之服务特别对了,但是相对于Github的一些规范的老三方服务,缺少了那么部分竞争力。我们这想搭持续集成的劳动,但是无奈找不顶支撑Coding的老三在服务,代码Review也未曾一个复于我们舒心的感受,我肯定我们要求于大。再添加Coding的几次down机,其中同样次是咱准备发布新本子的那么一个下午…..

终于发生同一龙,我们老大两眼发光的以及咱们说:我们如果购置Github的劳动了,申请及成本了。

于是,我们浩浩荡荡的迁代码库。

搬迁到Github之后,我们初步接入各方工具,提高我们的工作效率(钱可免克白花啊)。

4、将数据集分割成训练集和数据集

划分训练集和测试集,更好的评估模型

from sklearn.naive_bayes import GaussianNB
from sklearn import cross_validation

# 准备数据
input_file = 'data_multivar.txt'
X = []
y = []
with open(input_file, 'r') as f:
    for line in f.readlines():
        data = [float(x) for x in line.split(',')]
        X.append(data[:-1])
        y.append(data[-1])

X = np.array(X)
y = np.array(y)
x_train,x_test,y_train,y_test=cross_validation.train_test_split(X,y,test_size=0.25,random_state=5)# 测试数据占25%,
# 建立朴素贝叶斯分类器
classifier_gaussiannb=GaussianNB()
classifier_gaussiannb.fit(x_train,y_train)
y_test_pre=classifier_gaussiannb.predict(x_test)
# 计算分类器的准确性
accuracy=100.0*(y_test==y_test_pre).sum()/x_test.shape[0]
print('结果:',accuracy)
# 画出数据和边界
plot_classifier(classifier_gaussiannb,x_test,y_test_pre)

很快展开沟通 — Slack

Slack
A messaging app for teams who see through the Earth

深信大部分团都是行使微信进行联系的,
再同潮,最为一个发生逼格的团组织,我们采取了Slack进行集团达之沟通,在Slack上,你得创建频道(Channel),不同Channel不同之人头展开在不同的话题沟通。我们来规划之Channel、产品之Channel、开发的Channel。我最好欣赏的是,Slack可以连接抱夥叔着服务,Github是内一个。

对接Github之后,项目的各个一个Commit、PR之类的动态消息,会让推送到聊天室中。

赞助你时刻掌控项目动态。

Slack接抱Githu只是中的一个有点作用而已,更强大的在于Slack本身,利器如何用,待君慢慢体会。

,Slack有一个硬伤:不见面正确上网,用非了呀。

6、混淆矩阵可视化

混淆矩阵(confusion
matrix)是了解分类型性能的数据表,它推向我们懂得什么把测试数据分为不同之类似。当朝指向算法进行调优时,就待以
针对算法做出改变之前了解多少的一无是处分类情况。有些分类效果比任何分类效果不同,混淆矩阵可以扶持我们了解。

from sklearn.metrics import confusion_matrix

# 显示混淆矩阵
def plot_confusion_matrix(confusion_mat):
    plt.imshow(confusion_mat,interpolation='nearest',cmap=plt.cm.gray)
    plt.colorbar()
    tick_marks=np.arange(4)
    plt.xticks(tick_marks,tick_marks)
    plt.yticks(tick_marks,tick_marks)
    plt.show()

y_true = [1, 0, 0, 2, 1, 0, 3, 3, 3]
y_pred = [1, 1, 0, 2, 1, 0, 1, 3, 3]
confusion_mat=confusion_matrix(y_true,y_pred)
plot_confusion_matrix(confusion_mat)

连集成 — TravisCI

TravisCI
Test and Deploy with Confidence
Easily sync your GitHub projects with Travis CI and you’ll be testing
your code in minutes!

无亮堂您闹没有起好奇Github上的组成部分明星类的如此的标签:

图片 1

Build Status

本条是Express的构建状态的签,格式是svg,它会冲Express的构建状态改变。如果Express的某某平等差提交是没有通过TravisCI构建的,他见面成
build failing。(有心人可以点击是标签上看看。)

我们参加TravisCI主要目的是用以自动化的单元测试,每一样赖Commit与PR,TravisCI都见面起Github仓库中拉取代码,然后实施我们形容好之单元测试,通过与否会通过状态展示出。
集合的人口而看build
failing,就未会见统一了,这在早晚水准达到保险跟加强了代码的色。

TravisCI除了可以用来自动化单元测试,还可自动化部署,可以设定,通过测试之后,就活动部署上丝。

TravisCI对于公开仓库是免费之,但对个人仓库是只要收费的,而且价钱为不便利。
一旦你认为贵,这里还有一个好代替的:CircleCI
TravisCI可以做的,它还可以开赢得,而且会提供一个免费的私有仓库。

9、生成验证曲线

以第8节省中采取了n_estimators和max_depth参数,而及时片单为称超参数(hyperparameters),分类器的性质在这有限只参数的值,而这节就是行使验证曲线理解训练得分情况。(其他参数可免更换),实例如下:

from sklearn.model_selection import  validation_curve

classifier=RandomForestClassifier(max_depth=4,random_state=7)
parameter_grid=np.linspace(25,200,8).astype(int)
train_scores,validation_scores=validation_curve(classifier,X,y,'n_estimators',parameter_grid,cv=5)#对n_estimators参数进行验证
print('training scores:',train_scores)
print('validation scores:',validation_scores)

plt.figure()
plt.plot(parameter_grid,100*np.average(train_scores,axis=1),color='black')
plt.show()

classifier=RandomForestClassifier(n_estimators=20,random_state=7)
parameter_grid=np.linspace(2,10,5).astype(int)
train_scores,validation_scores=validation_curve(classifier,X,y,'max_depth',parameter_grid,cv=5)#max_depth
print('training scores:',train_scores)
print('validation scores:',validation_scores)

plt.figure()
plt.plot(parameter_grid,100*np.average(train_scores,axis=1),color='black')
plt.show()

代码Review — Reviewable

Reviewable
GitHub code reviews done right

使你觉得Github自带的Review还不够满足的话语,可以品味一下即款产品。
当您付一个PR之后,在你的PR中,会于您的评论框中置放这样的按钮

点击上Reviewable的页面对应之PR进行review。

同时一个PR没有成功Review之前,是会见直接深受告诫,让你警惕进行统一。

5、用交叉验证检验模型准确性

为能够于范更加安宁,还需要用数据的两样子集进行多次证明,若只是对特定的子集进行微调,会导致过分拟合。

最后

再同赖,作为一个产生逼格的团队,我们仍未见面满足现状。


设若本文对而发出因此
吁不要吝啬你们的Follow与Start
立马会大大支持我们延续写

「Github」
MZMonster
:@MZMonster
JC_Huang
:@JerryC8080

2、逻辑回归分类器

逻辑回归是同等种分类方法,给得一组数据点,需要建立一个足以接近里绘制线性边界的模型。就好对训练多少派生的一模一样组方程进行求解来取边界。

import numpy as np
from sklearn import linear_model
import matplotlib.pyplot as plt

# 准备数据
X = np.array([[4, 7], [3.5, 8], [3.1, 6.2], [0.5, 1], [1, 2], [1.2, 1.9], [6, 2], [5.7, 1.5], [5.4, 2.2]])
y = np.array([0, 0, 0, 1, 1, 1, 2, 2, 2])

# 初始化一个逻辑分类回归器
classifier=linear_model.LogisticRegression(solver='liblinear',C=10000)#solver设置求解系统方程的算法类型,C表示正则化强度,越小表强度越高,C越大,各个类型的边界更优。

#训练分类器
classifier.fit(X,y)

# 定义画图函数
def plot_classifier(classifier,X,y):
    # 获取x,y的最大最小值,并设置余值
    x_min,x_max=min(X[:,0])-1.0,max(X[:,0]+1.0)
    y_min,y_max=min(X[:,1])-1.0,max(X[:,1]+1.0)
    # 设置网格步长
    step_size=0.01
    # 设置网格
    x_values,y_values=np.meshgrid(np.arange(x_min,x_max,step_size),np.arange(y_min,y_max,step_size))
    # 计算出分类器的分类结果
    mesh_output=classifier.predict(np.c_[x_values.ravel(),y_values.ravel()])
    mesh_output=mesh_output.reshape(x_values.shape)
    # 画图
    plt.figure()
    #选择配色方案
    plt.pcolormesh(x_values,y_values,mesh_output,cmap=plt.cm.gray)
    # 画点
    plt.scatter(X[:,0],X[:,1],c=y,s=80,edgecolors='black',linewidths=1,cmap=plt.cm.Paired)
    # 设置图片取值范围
    plt.xlim(x_values.min(),x_values.max())
    plt.ylim(y_values.min(),y_values.max())
    # 设置x与y轴
    plt.xticks((np.arange(int(min(X[:, 0]) - 1), int(max(X[:, 0]) + 1), 1.0)))
    plt.yticks((np.arange(int(min(X[:, 1]) - 1), int(max(X[:, 1]) + 1), 1.0)))
    plt.show()

# 画出数据点和边界
plot_classifier(classifier,X,y)

代码覆盖率 — Coveralls

Coveralls
We help you deliver code confidently by showing which parts of your
code aren’t covered by your test suite. Free for open source repos.
Pro accounts for private repos. Instant sign up through GitHub and
Bitbucket.

当超新星项目Express的Github项目主页中,你可看出这般的签:

图片 2

Coverage Status

整合着TravisCI的自动化单元测试,加上这个测试覆盖率,提高而对项目的信心。

5.1 性能指标

概念:

  • 精度(precision):被正确分类的样书数占据分类器分类出之总分类样本数量的比重。
  • 召回率(recall):被科学分类的样本数占某分类总样本数的比重。

    不错的机械上型需要保持两单指标能够同事处合理高度,所以引入F1得分指标,是精度和召回率的合成指标,实际上是精度与召回率的疏通均值(harmonic
    mean),公式如下:
    F1得分=2精度召回率/(精度+召回率)
    代码实现交叉验证:
    图片 3

    num_validations = 5
    # 正确率
    accuracy = cross_validation.cross_val_score(classifier_gaussiannb,X, y, scoring='accuracy', cv=num_validations)
    print("Accuracy: " + str(round(100*accuracy.mean(), 2)) + "%")
    # F1
    f1 = cross_validation.cross_val_score(classifier_gaussiannb,X, y, scoring='f1_weighted', cv=num_validations)
    print("F1: " + str(round(100*f1.mean(), 2)) + "%")
    # 精度
    precision = cross_validation.cross_val_score(classifier_gaussiannb,X, y, scoring='precision_weighted', cv=num_validations)
    print("Precision: " + str(round(100*precision.mean(), 2)) + "%")
    # 召回率
    recall = cross_validation.cross_val_score(classifier_gaussiannb,X, y, scoring='recall_weighted', cv=num_validations)
    print("Recall: " + str(round(100*recall.mean(), 2)) + "%")
    # 画出数据和边界
    plot_classifier(classifier_gaussiannb,x_test,y_test_pre)
    

1、建立简单分类器

import numpy as np
import matplotlib.pyplot as plt

# 准备数据
X = np.array([[3,1], [2,5], [1,8], [6,4], [5,2], [3,5], [4,7], [4,-1]])
y = [0, 1, 1, 0, 0, 1, 1, 0]
# 根据y的值分类X,取值范围为0~N-1,N表示有N个类
class_0=np.array([X[i] for i in range(len(X)) if y[i]==0])
class_1=np.array([X[i] for i in range(len(X)) if y[i]==1])
# 将点画出
plt.figure()
plt.scatter(class_0[:,0],class_0[:,1],color='red',marker='s')
plt.scatter(class_1[:,0],class_1[:,1],color='black',marker='x')
# 创建y=x的直线
line_x=range(10)
line_y=line_x
plt.plot(line_x,line_y,color='blue',linewidth=3)
plt.show()

7、提取性能报告

只是径直以方面的scikit-learn打印精度、召回率和F1得分。但是只要非需独自计算各个指标,可用该函数直接从模型中领取所有统计值。

# 提取性能报告
from sklearn.metrics import classification_report

target_names = ['Class-0', 'Class-1', 'Class-2', 'Class-3']
print(classification_report(y_true,y_pred,target_names=target_names))

10、生成学习曲线

读书曲线而辅助我们懂得训练多少集大小对机械上型的影响,当遇计算能力范围时,这点好有因此,实例如下:

from sklearn.model_selection import learning_curve

classifier=RandomForestClassifier(random_state=7)
parameter_grid=np.array([200,500,800,1100])
train_size,train_scores,validation_scores=learning_curve(classifier,X,y,train_sizes=parameter_grid,cv=5)#cv表示五折交叉验证
print('train_scores:',train_scores)
print('validation_scores:',validation_scores)

plt.figure()
plt.plot(parameter_grid,100*np.average(train_scores,axis=1),color='black')
plt.show()

ps:虽然训练数据集的范围越来越聊,仿佛精确度越强,但是它们可怜轻导致过拟合问题。但是倘若选择于生之数据集,又会消耗又多资源,所以应综合考虑。

8、根据汽车特征评估质量

使用随机森林分类器,用一个含有汽车又细节之数据集,分类吧汽车的质分成4受:不达到、达标、良好、优秀。代码如下:

from sklearn import preprocessing
from sklearn.ensemble import RandomForestClassifier

# 准备数据
input_file = 'car.data.txt'

X = []
count = 0
with open(input_file, 'r') as f:
    for line in f.readlines():
        data = line[:-1].split(',')  # line[:-1]表示line中最后一个换行删除
        X.append(data)

X = np.array(X)

# 使用标记编将字符串转化为数值
label_encoder = []
X_encoder = np.empty(X.shape)
print(X[0])
for i, item in enumerate(X[0]):  # 由于相同的信息是以列的形式显示,所以应该按列进行标记编码
    label_encoder.append(preprocessing.LabelEncoder())  # 初始化每列的标记编码器
    X_encoder[:, i] = label_encoder[-1].fit_transform(X[:, i])  # 未标记编码

X = X_encoder[:, :-1].astype(int)  # 将所有数据的除最后一列作为X,最后一列作为y
y = X_encoder[:, -1].astype(int)

# 训练随机森林分类器
params = {'n_estimators': 200, 'max_depth': 8, 'random_state': 7}  # 跟上章监督学习中的随机森林回归的参数一个意思:
# n_estimators指评估器的数量,则决策树数量,min_samples_split指决策树分裂一个节点需要用到的最小数据样本量
classifier = RandomForestClassifier(**params)
classifier.fit(X, y)

# 进行交叉验证
from sklearn import model_selection

# model_selection 将之前的sklearn.cross_validation, sklearn.grid_search 和 sklearn.learning_curve模块组合到一起

accuracy = model_selection.cross_val_score(classifier, X, y, scoring='accuracy', cv=3)
print('accuracy:', str(round(accuracy.mean(), 2)) + '%')

# 对某条信息进行分类
input_data = ['low', 'low', '4', 'more', 'big', 'med']
input_data_encoded = [-1] * len(input_data)

for i, item in enumerate(input_data):
    labels=[]
    labels.append(input_data[i])# 转换形式,否则下行会报错
    input_data_encoded[i] = int(label_encoder[i].transform(labels))

input_data_encoder = np.array(input_data_encoded)
output_class = classifier.predict(input_data_encoder)  # 预测
print('结果:', label_encoder[-1].inverse_transform(output_class)[0])  # 最后一个编码器是结果

创分类器

简介:分拣是据用多少的特性将那个分类成多少种的历程。分类及回归不同,回归之出口是实数。监督上分类器就是用带标记的训练数
据建立一个型,然后对未知的数额进行分拣。
分类器得兑现分类效果的轻易算法,最简便的分类器就是简单的数学函数。其中起二元(binary)分类器,将数据分为两接近,也可多样(multiclass)分类器,将数据分为两单以上之花色。解决分类问题之多寡手段还倾向被解决二第一分类问题,可由此不同式样对那个进行扩张,进而缓解一系列分类。