python predict中predict函数在哪个库

qdqade 的BLOG
用户名:qdqade
文章数:77
访问量:1336
注册日期:
阅读量:5863
阅读量:12276
阅读量:381550
阅读量:1073522
51CTO推荐博文
svm_predict_probability函数 &需要在train之前设置parameter参数 才能得到概率模型。当svm_parameter.probability=1,或者options中的-b参数设置为1时。struct svm_parameter {
int kernel_
/* for poly */
/* for poly/rbf/sigmoid */
double coef0; /* for poly/sigmoid */
/* these are for training only */
double cache_ /* in MB */
/* stopping criteria */
double C; /* for C_SVC, EPSILON_SVR, and NU_SVR */
/* for C_SVC */
int *weight_ /* for C_SVC */
/* for C_SVC */
/* for NU_SVC, ONE_CLASS, and NU_SVR */
/* for EPSILON_SVR */
/* use the shrinking heuristics */
/* do probability estimates */ 1 do,0 not };2)svm_predict_probability函数与svm_predict函数在接口上只有第三个参数prob_estimates不同,其余两个都相同,所以这里只说明第三个参数的作用。prob_estimates里实际上存放的就是估计出的概率,比如说m分类问题,那prob_estimates就是一个1*m列的矩阵,没列代表属于相对类别的概率。这个相对类别是与svm输出结构体中的Lable相对应的!3)返回值,返回的就是最大概率对应的类别标签。如果二分类问题那就是1或-1.
了这篇文章
类别:┆阅读(0)┆评论(0)python学习:机器学习下的pybrain和多线程编程
python学习:机器学习下的pybrain和多线程编程
最近实习需要用到这几个库,主要是用pybrain里的神经网络来做预测模型,而多线程编程的知识是我自己想学的,对于IO密集型的数据处理和保存来说,多线程的使用是必须的,所以我就把这两者加入了学习计划。先占个坑,慢慢更新
我去。。还没写这个就变成我博客涨访问最快的了。。心理难安啊,本来打算慢慢来的,看来要速度点了,明天(3.13)前就把pybrain的写好!
pybrain的神经网络看的差不多了,总结如下!
一 pybrain
关于pybrain的安装,会git的兄弟们只要使用如下命令:
git clone git:///pybrain/pybrain.git
python setup.py install
就可以安装pybrain了,什么,你不会用git!?那你可以进入上面那个网站,直接下载zip格式再解压文件。
然后pybrain本身有一些关联的包需要下载如:numpy,scipy,我的建议是下载anaconda,这个IDE是专门用来给python做数据分析的,里面把各种关联的库都帮你绑定好了,连scikit-learn都有,我之前自己关联各种库的时候老是会出错,所以建议大家就用这个了,省心省力啊。安装好后可以输入import pybrain验证一下是否成功了。接下来讲pybrain的使用。
anaconda下载地址:
https://www.continuum.io/downloads
pybrain内部集成了一些分类器,有BP神经网络、循环神经网络RNN,还有增强学习RL的东西,这里只介绍下怎么使用BP神经网络,其他的大家要是感兴趣可以去看官方文档:
http://www.pybrain.org/docs/
这次建模通过拟合y=x1^2+x2^2+x3^2这个函数来做示例。总共是三个输入一个输出,步骤如下:
#如下,首先import一些需要的包:
from pybrain.tools.shortcuts import buildNetwork
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.structure import TanhLayer,LinearLayer,SigmoidLayer,SoftmaxLayer
from pybrain.tools.validation import CrossValidator,Validator
import numpy as np
import pandas as pd
2、创建数据X和Y
x1=[float(x) for x in range(-100,400)]
#换成float型是为了后期可以标准化为0-1
x2=[float(x) for x in range(-200,800,2)]
x3=[float(x) for x in range(-500,1000,3)]
num=len(x1)
for i in range(num):
y.append(x1[i]**2+x2[i]**2+x3[i]**2)3、使用minmax标准化并转化成array格式
x1=[(x-min(x1))/(max(x1)-min(x1)) for x in x1]
x2=[(x-min(x2))/(max(x2)-min(x2)) for x in x2]
x3=[(x-min(x3))/(max(x3)-min(x3)) for x in x3]
y=[(x-min(y))/(max(y)-min(y)) for x in y]#将X和Y转化为array格式
x=np.array([x1,x2,x3]).T
y=np.array(y)
xdim=x.shape[1]
#确定输入特征维度
#确定输出的维度
此时x和y的格式如下:
X:500行3列
array([[ 0. & & & &, &0. & & & &, &0. & & & &],
& & & &[ 0., &0., &0.],
& & & &[ 0., &0., &0.],
& & & &...,&
& & & &[ 0., &0., &0.],
& & & &[ 0., &0., &0.],
& & & &[ 1. & & & &, &1. & & & &, &1. & & & &]])
Y:500行1列
array([ &1., & 1., & 1.,
& & & & &1., & 1., & 1.,
& & & & &1., & 1., & 1.,
& & & & &...,
& & & & &1., & 1., & 1.])
4、创建神经网络使用的监督数据集
DS=SupervisedDataSet(xdim,ydim)
for i in range(num):
DS.addSample(x[i],y[i])
train,test=DS.splitWithProportion(0.75)
#将数据拆分,0.75为训练数据,0.25为测试数据
#DS['input']
#输入x的值
#DS['target']
#输出y的值
#DS.clear()
5、创建神经网络
#如下,我这次总共创建了4层的神经网络,一层输入,2个隐含层,分别是10个节点和5个节点,一层输出,多少层可以根据自己需求来确定
#隐含层使用的是tanh函数,输出则使用的是y=x线性输出函数
ann=buildNetwork(xdim,10,5,ydim,hiddenclass=TanhLayer,outclass=LinearLayer)
#BP算法训练,参数为学习率和动量
trainer=BackpropTrainer(ann,dataset=train,learningrate=0.1,momentum=0.1,verbose=True)
#trainer.trainEpochs(epochs=20)
#epochs表示迭代的次数
trainer.trainUntilConvergence(maxEpochs=50)
#以上这两种训练方法都可以,看自己喜欢
6、预测与作图
#预测test情况
output=ann.activateOnDataset(test)
#ann.activate(onedata)可以只对一个数据进行预测
#稍微整理下output输出,为了后期作图
for i in output:
out.append(i[0])
#使用pandas作图
df=pd.DataFrame(out,columns=['predict'])
df['real']=test['target']
df1=df.sort_values(by='real')
df1.index=range(df.shape[0])
df.plot(kind='line')
对test作图情况如下:
其中横坐标仅表示第几个数,纵坐标表示标准化后的y
若对整个五百组数据拟合的话,情况如下:
只需将代码中的test都改成DS即可。
到了这里操作基本差不多了,其他模块还有一些附加功能,如:
#Validator可以进行一些误差的计算
v=Validator()
v.MSE(output,test['target'])
#计算test的原始值和预测值的均方差和,两者格式必须相等
#使用交叉验证
CrossValidator(trainer, DS, n_folds=5,max_epochs=20)可以根据自己需要来选取相应的功能。
然后以上的神经网络训练针对的是连续型输出的,当要使用分类的神经网络时,最好设置下神经网络中代表分类的变量,具体可以查阅pybrain的doc
最后总结下这几天学习操作和查的资料对神经网络做个总结。
首先,神经网络这玩意的激活函数的范围基本都在0-1或者-1-1,所以数据必须标准化,不然如下:
sigmoid函数
可以看到,当X&4之后,得到的转化值基本都是1了,这样后期拟合将无法收敛。然后关于隐藏节点和输出节点的激活函数选择,一般是这样的,如果是连续型的输出,我们一般使用输出函数为y=x的线性输出函数,如果是分类的神经网络,二元分类的时候我们使用sigmoid,多元分类的时候则采用softmax。softmax具有将一个较大的值转化为1,其他值转化为0的功能,相当于一个max函数,在多元分类中非常有用,而sigmoid多使用与二元分类,能将数据转化到0-1,通过设置阈值来判断取0还是1。然后关于为什么我选择了tanh作为隐藏节点的激活函数,因为《神经网络43个案例分析》书里提到对各个激活函数的匹配情况作了分析,发现tanh和y=x配套的时候拟合误差是最低的,所以我这里使用了这两函数。如下:
purelin就是y=x.
然后关于参数的设置:
momentun冲量:为了越过局部最小值
learningrate学习率:为了加快学习速度
weightdecay:给损失函数加个惩罚,惩罚过大的权值数,让他能够选取权值和最小的NN,目的是为了防止过拟合,一般为0.1左右
PS:weightdecay设置的不好,可能使得本身可以收敛的网络变得无法收敛,所以要嘛不设,要嘛多尝试几个
我的热门文章
即使是一小步也想与你分享热门推荐:
选自machinelearningmastery
机器之心编译
参与:Terrence L、武竞、Xavier Massa
感知器算法是最简单的人工神经网络形式之一。感知器是一个单神经元的模型,可以用于两个类别的分类问题,也能为以后开发更大的神经网络奠定基础。在本教程中,你将了解到如何利用 Python 从头开始实现感知器算法。
在完成本教程后,你将学会:
如何训练感知器的网络权重
如何利用感知器做出预测
如何对于现实世界的分类问题实现感知器算法
让我们开始吧。
本节简要介绍了感知器算法和 Sonar 数据集,我们将会在后面应用。
感知器算法
感知器的灵感来自于被称为神经元的单个神经细胞的信息处理过程。
神经元通过其树突接受输入信号,并将电信号向下传递到细胞体内。
通过类似的方式,感知器从训练数据的样本中接受输入信号,训练数据被加权并在称为激活(activation)的线性方程中进行组合。
然后,使用诸如阶跃传递函数(step transfer function)的传递函数将激活变换为输出值或预测。
以这种方式,感知器是用于具有两个类(0 和 1)的问题的分类算法,其中可以使用线性方程来分离这两个类。
它与以类似方式进行预测的线性回归和 logistic 回归密切相关(例如输入的加权和)。
感知器算法的权重必须使用随机梯度下降算法从训练数据中估计。
随机梯度下降
梯度下降是通过跟随成本函数(cost function)的梯度来最小化函数的过程。
这涉及了解成本的形式以及导数,使得从给定的点你可以知道梯度并且可以在该方向上移动,比如下坡到最小值。
在机器学习中,我们可以使用一种技术来评估和更新称为随机梯度下降的每次迭代的权重,以最小化我们的训练数据模型的误差。
这种优化算法的工作方式是每次向模型显示每个训练实例。模型对训练实例进行预测,计算误差并更新模型以便减少下一预测的误差。
该过程可以用于在模型中找到能使训练数据上模型误差最小的权重集合。
对于感知器算法,每次迭代,权重(w)使用以下等式更新:
其中w是正在被优化的权重,learning_rate是必须配置的学习速率(例如 0.01),(expected - predicted)是在归因于权重的训练数据上的模型的预测误差,x是输入值。
Sonar 数据集
我们将在本教程中使用的数据集是 Sonar 数据集。
这是一个描述了声呐啾啾叫声并返回不同服务的试探的数据集。60 个输入变量是在不同角度的返回强度。这是一个二元分类问题,需要一个模型来区分金属圆柱体和岩石。
它是一个很好理解的数据集。所有的变量是连续的,通常在 0 到 1 的范围内。因此,我们不必对输入数据进行归一化,这通常是使用感知器算法的一个好地方。输出变量是字符串「M」(表示矿 mine)和「R」(表示岩石 rock),我们需要将其转换为整数 1 和 0。
通过在数据集(M 或 Mines)中预测具有最多观测值的类,零规则算法(Zero Rule Algorithm)可以实现 53%的精度。
你可以在 UCI Machine Learning repository:
https://archive.ics.uci.edu/ml/datasets/Connectionist+Bench+(Sonar,+Mines+vs.+Rocks))中了解有关此数据集的更多信息。你也可以免费下载数据集,并将其放在工作目录中,文件名为 sonar.all-data.csv。
这个教程分为三个部分:
1.作出预测
  2.训练网络权重
  3.将 Sonar 数据集建模
这些步骤将带给你实现和应用感知器算法到你自己的分类预测建模问题的基础。
第一步是开发一个可以进行预测的函数。
这将会需要在随机梯度下降中的候选权重值的评估以及在模型被最终确定之后,我们希望开始对测试数据或新数据进行预测。
下面是一个名为 predict() 的函数,用于预测给定一组权重的行的输出值。
第一个权重始终是偏差,因为它是独立的,不负责特定的输入值。
我们可以设计一个小数据集来测试我们的预测函数。
我们也可以使用之前准备好的权重来为这个数据集做预测。
将所有这些集中起来,我们就可以测试我们的 predict() 函数了,如下:
该函数有两个输入值 X1、X2 和三个权重参数 bias、w1 及 w2。该问题的激活函数有如下的形式:
或者,我们能够手动地选择权重值:
运行这个函数,我们将会得到与期望输出值 (**y**) 相符合的预测值。
  现在,我们已经准备好使用随机梯度下降法(SGD)来最优化我们的权重值。
2. 训练神经权重
我们可以使用 SGD,来估计出对于训练集的权重值。
SGD 有两个参数:
学习率(Learning Rate):用来限制每次更新中权重项修正值的大小。
迭代次数(Epochs):在训练集上训练同时更新权重项的次数。
  这两个参数,和训练集一起,都将会是预测函数的输入参数。
  在这个函数中,我们需要运行三个循环:
1. 对于每次迭代进行循环;
2. 对于一次迭代中,训练集的每一行进行循环;
3. 对于每一行中,每一个值进行循环。
  如你所见,我们在每一次迭代中,对训练集每一行中每一个权值都进行更新。
我们基于现有情况模型预测的「误差」,来对权重值进行更新。误差,是由候选权值计算出来的预测值与(数据集中的)期望值的差。
对每一个输入属性,都有一个权重值,并且这些权_重值都连续更新_。如:
偏差项以一种相似的方式更新,不过因为它本身就不与特定的输入值有关,因而在式子中没有输入值的项。
现在,我们把所有的内容组合到一起。如下所示,在 train_weights() 函数中,它使用 SGD 方法,计算对于给定训练集的权重值。
如你所见,我们也在每次迭代中,记录下了平方误差之和(这始终是一个正值)。因而我们能在外循环的每次迭代中,print 一些有用的信息。
我们也可以在我们上面创建的小规模数据集上,对该函数进行测试。
我们将使用 0.1 的学习率和 5 次迭代,也就是把参数在训练集上更新五次,来训练这个模型。
运行这个案例,它将会在每一次迭代结束后,显示出该次迭代后的平方误差和,并在完成所有迭代后,显示最后的权重集。
  你可以看到,这个算法很快学会了「解决」这个问题。
现在我们来试试看,如何在一个实际的数据集上应用这个算法。
3. 对声纳数据集进行建模
在这一节中,我们将使用 SGD 方法,对一个声纳数据集,训练一个感知器模型。
在该例子中,我们假定,在当前的工作目录下,有一名为sonar.all-data.csv的文件,存储着该数据集。
首先该数据集被载入。数据集中字符串格式的数据被转换为数值型,同时输出值从字符串被转换了 0 或 1 的两个整数值。
通过load_csv(), str_column_to_float()及str_column_to_int() 三个函数,我们实现了对数据集的读取及预处理。
我们使用「k 倍交叉验证法」(k-fold cross validation)来对学习后的模型在未知数据集上的表现进行评估。也就是说,我们需要建立 k 个模型并估计各模型的平均误差。分类准确性将被用于模型的评估工作中。这些工作在 cross_validation_split(), accuracy_metric() 及 evaluate_algorithm() 函数中被完成。
我们将会使用上面设置的predict()和train_weights()函数来训练该模型。同时,我们将会用一个新函数perceptron() 来将它们组合在一起。如下是完整的例子。
在交叉验证中,我们取 k 为 3――也就是对每一块数据,都有 208/3 约 70 个记录,会在每次迭代中被用于计算。我们取 0.1 的学习率及 500 的训练迭代次数,来训练模型。
你可以尝试你自己的参数,并且看看你的结果能否战胜我的分数。运行这个例子,将会显示对 3 倍交叉验证中每一块的分数,以及平均的分类正确率。
我们可以看到,这个正确率约为 73%,高于由仅考虑主要类的零规则算法(Zero Rule Algorithm)得到的 50% 的正确率基准值。
这一节列举了关于该入门指导的拓展内容,你可以考虑深入探究其中的一些内容。
调试样例参数。尝试着去调整包括学习率、迭代次数乃至于数据预处理的方法,以使模型在该数据集上,得到更高的分数。
批量化进行随机梯度下降。修改随机梯度下降的算法,使得我们能记录下每一次迭代的更新值,并且在迭代结束的时候再基于记录的更新值来更新权重值。
额外的分类问题。将文中提到的技巧,应用于 UCI 机器学习数据集中其他数据。
在该教程中,你学习了如何从零开始,用 Python 实现,基于随机梯度下降的感知器算法。
你学会了:
如何对一个二元分类问题进行预测。
如何使用随机梯度下降,对一系列的权重值进行最优化。
如何将这个技巧,应用到一个实际的分类预测模型。
&本文由机器之心编译,转载请联系本公众号获得授权。
  ?------------------------------------------------
加入机器之心(全职记者/实习生):
投稿或寻求报道:
广告&商务合作:
请先登录再操作
请先登录再操作
微信扫一扫分享至朋友圈
知名IT评论人,曾就职于多家知名IT企业,现是科幻星系创建人
未来在这里发声。
新媒体的实践者、研究者和批判者。
立足终端领域,静观科技变化。深入思考,简单陈述。
智能硬件领域第一自媒体。用Anaconda的spyder:新建train_test.py#!usr/bin/env python
#-*- coding: utf-8 -*-
import sys
import time
from sklearn import metrics
import numpy as np
import cPickle as pickle
reload(sys)
sys.setdefaultencoding('utf8')
# Multinomial Naive Bayes Classifier
def naive_bayes_classifier(train_x, train_y):
from sklearn.naive_bayes import MultinomialNB
model = MultinomialNB(alpha=0.01)
model.fit(train_x, train_y)
return model
# KNN Classifier
def knn_classifier(train_x, train_y):
from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier()
model.fit(train_x, train_y)
return model
# Logistic Regression Classifier
def logistic_regression_classifier(train_x, train_y):
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(penalty='l2')
model.fit(train_x, train_y)
return model
# Random Forest Classifier
def random_forest_classifier(train_x, train_y):
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=8)
model.fit(train_x, train_y)
return model
# Decision Tree Classifier
def decision_tree_classifier(train_x, train_y):
from sklearn import tree
model = tree.DecisionTreeClassifier()
model.fit(train_x, train_y)
return model
# GBDT(Gradient Boosting Decision Tree) Classifier
def gradient_boosting_classifier(train_x, train_y):
from sklearn.ensemble import GradientBoostingClassifier
model = GradientBoostingClassifier(n_estimators=200)
model.fit(train_x, train_y)
return model
# SVM Classifier
def svm_classifier(train_x, train_y):
from sklearn.svm import SVC
model = SVC(kernel='rbf', probability=True)
model.fit(train_x, train_y)
return model
# SVM Classifier using cross validation
def svm_cross_validation(train_x, train_y):
from sklearn.grid_search import GridSearchCV
from sklearn.svm import SVC
model = SVC(kernel='rbf', probability=True)
param_grid = {'C': [1e-3, 1e-2, 1e-1, 1, 10, 100, 1000], 'gamma': [0.001, 0.0001]}
grid_search = GridSearchCV(model, param_grid, n_jobs = 1, verbose=1)
grid_search.fit(train_x, train_y)
best_parameters = grid_search.best_estimator_.get_params()
for para, val in best_parameters.items():
print para, val
model = SVC(kernel='rbf', C=best_parameters['C'], gamma=best_parameters['gamma'], probability=True)
model.fit(train_x, train_y)
return model
def read_data(data_file):
import gzip
f = gzip.open(data_file, "rb")
train, val, test = pickle.load(f)
train_x = train[0]
train_y = train[1]
test_x = test[0]
test_y = test[1]
return train_x, train_y, test_x, test_y
if__name__ == '__main__':
data_file = "mnist.pkl.gz"
thresh = 0.5
model_save_file = None
model_save = {}
test_classifiers = ['NB', 'KNN', 'LR', 'RF', 'DT', 'SVM', 'GBDT']
classifiers = {'NB':naive_bayes_classifier,
'KNN':knn_classifier,
'LR':logistic_regression_classifier,
'RF':random_forest_classifier,
'DT':decision_tree_classifier,
'SVM':svm_classifier,
'SVMCV':svm_cross_validation,
'GBDT':gradient_boosting_classifier
print'reading training and testing data...'
train_x, train_y, test_x, test_y = read_data(data_file)
num_train, num_feat = train_x.shape
num_test, num_feat = test_x.shape
is_binary_class = (len(np.unique(train_y)) == 2)
print'******************** Data Info *********************'print'#training data: %d, #testing_data: %d, dimension: %d' % (num_train, num_test, num_feat)
for classifier in test_classifiers:
print'******************* %s ********************' % classifier
start_time = time.time()
model = classifiers[classifier](train_x, train_y)
print'training took %fs!' % (time.time() - start_time)
predict = model.predict(test_x)
if model_save_file != None:
model_save[classifier] = model
if is_binary_class:
precision = metrics.precision_score(test_y, predict)
recall = metrics.recall_score(test_y, predict)
print'precision: %.2f%%, recall: %.2f%%' % (100 * precision, 100 * recall)
accuracy = metrics.accuracy_score(test_y, predict)
print'accuracy: %.2f%%' % (100 * accuracy)
if model_save_file != None:
pickle.dump(model_save, open(model_save_file, 'wb'))
结果:reading training and testing data...
******************** Data Info *********************
#training data: 50000, #testing_data: 10000, dimension: 784******************* NB ********************training took 0.558000s!
accuracy: 83.69%
******************* KNN ********************training took 29.467000s!
accuracy: 96.64%
******************* LR ********************training took 104.605000s!
accuracy: 91.98%
******************* RF ********************training took 4.401000s!
accuracy: 93.91%
******************* DT ********************training took 26.923000s!
accuracy: 87.07%
******************* SVM ********************training took 3831.564000s!
accuracy: 94.35%
******************* GBDT ********************在这个数据集中,由于数据分布的团簇性较好(如果对这个数据库了解的话,看它的t-SNE映射图就可以看出来。由于任务简单,其在deep learning界已被认为是toy dataset),因此KNN的效果不赖。GBDT是个非常不错的算法,在kaggle等大数据比赛中,状元探花榜眼之列经常能见其身影。
以上就介绍了Python机器学习库sciki-earn实践,包括了python,机器学习方面的内容,希望对Python教程有兴趣的朋友有所帮助。
本文网址链接:/article/detail_584169.html
上一篇: 下一篇:scikit-learn使用笔记与sign prediction简单小结 - hereson - ITeye技术网站
博客分类:
经Edwin Chen的推荐,认识了这个非常强大的python机器学习工具包。这个帖子作为笔记。(其实都没有笔记的意义,因为他家文档做的太好了,不过还是为自己记记吧,为以后节省若干分钟)。如果有幸此文被想用scikit-learn的你看见,也还是非常希望你去它们的看文档。主页中最值得关注的几个部分:User Guide几乎是machine learning的索引,各种方法如何使用都有,Reference是各个类的用法索引。
S1. 导入数据
大多数数据的格式都是M个N维向量,分为训练集和测试集。所以,知道如何导入向量(矩阵)数据是最为关键的一点。这里要用到numpy来协助。假设数据格式是:
Stock prices
indicator1
indicator2
导入代码参考:
import numpy as np
f = open("filename.txt")
f.readline()
# skip the header
data = np.loadtxt(f)
X = data[:, 1:]
# select columns 1 through end
y = data[:, 0]
# select column 0, the stock price
libsvm格式的数据导入:
&&& from sklearn.datasets import load_svmlight_file
&&& X_train, y_train = load_svmlight_file("/path/to/train_dataset.txt")
&&&X_train.todense()#将稀疏矩阵转化为完整特征矩阵
更多格式数据导入与生成参考:
S2. Supervised Classification 几种常用方法:
Logistic Regression
&&& from sklearn.linear_model import LogisticRegression
&&& clf2 = LogisticRegression().fit(X, y)
LogisticRegression(C=1.0, intercept_scaling=1, dual=False, fit_intercept=True,
penalty='l2', tol=0.0001)
&&& clf2.predict_proba(X_new)
Linear SVM (Linear kernel)
&&& from sklearn.svm import LinearSVC
&&& clf = LinearSVC()
&&& clf.fit(X, Y)
&&& X_new = [[ 5.0,
&&& clf.predict(X_new)#reuslt[0] if class label
array([0], dtype=int32)
SVM (RBF or other kernel)
&&& from sklearn import svm
&&& clf = svm.SVC()
&&& clf.fit(X, Y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3,
gamma=0.0, kernel='rbf', probability=False, shrinking=True, tol=0.001,
verbose=False)
&&& clf.predict([[2., 2.]])
array([ 1.])
Naive Bayes (Gaussian likelihood)
from sklearn.naive_bayes import GaussianNB
&&& from sklearn import datasets
&&& gnb = GaussianNB()
&&& gnb = gnb.fit(x, y)
&&& gnb.predict(xx)#result[0] is the most likely class label
Decision Tree (classification not regression)
&&& from sklearn import tree
&&& clf = tree.DecisionTreeClassifier()
&&& clf = clf.fit(X, Y)
&&& clf.predict([[2., 2.]])
array([ 1.])
Ensemble (Random Forests, classification not regression)
&&& from sklearn.ensemble import RandomForestClassifier
&&& clf = RandomForestClassifier(n_estimators=10)
&&& clf = clf.fit(X, Y)
&&& clf.predict(X_test)
S3. Model Selection (Cross-validation)
手工分training data和testing data当然可以了,但是更方便的方法是自动进行,scikit-learn也有相关的功能,这里记录下cross-validation的代码:
&&& from sklearn import cross_validation
&&& from sklearn import svm
&&& clf = svm.SVC(kernel='linear', C=1)
&&& scores = cross_validation.cross_val_score(clf, iris.data, iris.target, cv=5)#5-fold cv
#change metrics
&&& from sklearn import metrics
&&& cross_validation.cross_val_score(clf, iris.data, iris.target, cv=5, score_func=metrics.f1_score)
#f1 score:
more about cross-validation:
Note: if using LR, clf = LogisticRegression().
S4. Sign Prediction Experiment
数据集,EPINIONS,有user与user之间的trust与distrust关系,以及interaction(对用户评论的有用程度打分)。
Features:网络拓扑feature参考"Predict positive and negative links in online social network",用户交互信息feature。
一共设了3类instances,每类3次训练+测试,训练数据是测试数据的10倍,~80,000个29/5/34维向量,得出下面一些结论。时间 上,GNB最快(所有instance都是2~3秒跑完),DT非常快(有一类instance只用了1秒,其他都要4秒),LR很快(三类 instance的时间分别是2秒,5秒,~30秒),RF也不慢(一个instance9秒,其他26秒),linear kernel的SVM要比LR慢好几倍(所有instance要跑30多秒),RBF kernel的SVM比linear SVM要慢20+倍到上百倍(第一个instance要11分钟,第二个instance跑了近两个小时)。准确度上 RF&LR&DT&GNB&SVM(RBF kernel)&SVM(Linear kernel)。GNB和SVM(linear kernel)、SVM(rbf kernel)在第二类instance上差的比较远(10~20个百分点),LR、DT都差不多,RF确实体现了ENSEMBLE方法的强大,比LR有 较为显著的提升(近2~4个百分点)。(注:由于到该文提交为止,RBF版的SVM才跑完一次测试中的两个instance,上面结果仅基于此。另外,我 还尝试了SGD等方法,总体上都不是特别理想,就不记了)。在feature的有效性上面,用户交互feature比网络拓扑feature更加有效百分 五到百分十。
S5.通用测试源代码
这里是我写的用包括上述算法在内的多种算法的自动分类并10fold cross-validation的python代码,只要输入文件保持本文开头所述的格式(且不包含注释信息),即可用多种不同算法测试分类效果。
浏览: 1020521 次
来自: 苏州
解决办法:工具 -& 编译选项 -& 编译器
这个…… 代码不全真的是让人很憋屈的感觉啊
老兄能留个QQ号吗?具体的我有些东西想请教下你
貌似有点问题,只派发一次事件啊
pc_kai 写道可以给源码吗?50¥ 即可

我要回帖

更多关于 python2.7函数库chm 的文章

 

随机推荐