怎样开始阅读scikit-learnopengl的源码?是否值得读

scikitlearn可以处理中文文本么_百度知道
scikitlearn可以处理中文文本么
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
int month_day(int year,int month) //判断这一个月有多少天{ int mon_day[]={31,28,31,30,31,30,31,31,30,31,30,31}; //初始化每个月的天数if(leap(year)&&month==2 ) return 29; else return(mon_day[month-1]);
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。谷歌:为什么AI研究员们应该从Scikit-learn转向TensorFlow?(附源码)
&&&&&&欢迎投稿:&&&&&&
文章来源:medium 作者:KarthikMSwamy
本文编译自medium,作者为谷歌机器学习专家KarthikMSwamy。该专家日前撰文,讨论了TensorFlow与开源学习工具Scikit-Learn的异同及其先进性,并探讨TensorFlow的未来发展前景。
在过去这一年半的时间里,TensorFlow在采用率和计算速度等方面,均以惊人的速度在增长。
TensorFlow已经成为最受欢迎的机器学习算法开发库。但与此同时,它似乎也把自己定位为一个需要对会话和图表进行定义的库,而这是相当乏味和耗时的。尽管它在有效地计算梯度来训练卷积神经网络(CNN)、循环神经网络(RNN)和长短期记忆网络(LSTM)方面做得非常好,但也不尽然。
在这一系列的帖子中,我想讨论一下TensorFlow是如何用作通用机器学习库的。更具体地说,我们将讨论TensorFlow是如何类似于机器学习工具scikit-learn的,这是同样在数据科学家和开发人员中非常受欢迎的另一个机器学习库。
转向TensorFlow的原因
虽然scikit-learn在其算法库中具有高度优化的算法,但是当面对大量数据点时,它缺乏扩大的能力。而TensorFlow却可以提供相当多的优于scikit-learn的特点:
高性能机器学习模块
定制灵活性
缩放以适应大数据点
能够利用GPU并对地理分布式GPU设备进行训练
设备不可知计算
利用谷歌云对经过训练的机器学习模型进行推理
高度灵活的Apache 2.0许可证,而scikit-learn是基于BSD许可证(虽然两者都是商业上可用的,但Apache 2.0不太容易受到专利诉讼)
了解scikit-learn和TensorFlow之间类似的功能,这将使scikit-learn用户无缝地来使用TensorFlow。
使用scikit-learn和TensorFlow开发一个从中进行花品种分类的程序,以理解构建这样的系统所需的努力。展示TensorFlow是如何容易地为原型设计新的思路。
功能级别的相似性
scikit-learn受欢迎的原因之一是它很简单:classifier.fit() / classifier.predict()
使用任何一种分类器都可以使用相同的方法。这种简单的用户体验允许开发人员专注于算法及其参数,而不用担心那些需要被调用来完成手头任务的API。
另一方面,我们在TensorFlow中有高级API,这是受到scikit-learn的启发而得到的。TensorFlow中的这些功能与scikit-learn非常相似,具有类似的拟合和预测方法,以及允许进一步微调的其他功能。
在深入研究使用TensorFlow的高级API调用来开发我们的分类框架之前,我们先来讨论TensorFlow的低级计算框架。TensorFlow使用计算图表来执行其所有的计算。计算被表示为tf.Graph对象的一个实例,而其中的数据被表示为tf.Tensor对象,并使用tf.Operation对象对这样的张量对象进行操作。然后再使用tf.Session对象的会话中执行该图表。显而易见的是,使用TensorFlow的低级API创建分类框架将需要测试一个简单的机器学习原型。这就是我们讨论TensorFlow的高级API以与scikit-learn的API进行比较的原因之一。我们将会在接下来的帖子中讨论低级API及其用法。
我们使用scikit-learn的支持向量机(SVM)模块和TensorFlow的高级API构建分类器,以根据花的特征来对花进行分类。在这种情况下,数据集提供了四种不同的特征,比如萼片宽度、萼片长度、花瓣宽度和花瓣长度,以变将花分为这三种花种中的一种——Iris Setosa(山鸢尾)、Iris Versicolour(杂色鸢尾),以及Iris Virginica(维吉尼亚鸢尾)。
在我的GitHub页面上可以找到。
如果我们看一下GitHub链接,我们可以看到数据加载和拆分功能是由两个框架共享的。我们在scikit-learn中定义一个SVM分类器,如下所示:
# ------------------------------------------
# Scikit Learn Implementation
# ------------------------------------------
# Use support vector classification
classifier_sk = svm.SVC()
# Use the train data to train this classifier
classifier_sk.fit(x_train, y_train)
# Use the trained model to predict on the test data
predictions = classifier_sk.predict(x_test)
score = metrics.accuracy_score(y_test, predictions)
在上面的代码片段中,我们简单地定义了一个支持向量分类器svm.SVC(),其对象用于训练和预测。我们使用fit()实现训练,而使用predict()方法调用实现预测。最后,我们计算出这四行代码片段的最后一行的精度值。
另一方面,在TensorFlow中,我们可以使用一个深层神经网络(DNN)分类器来执行相同的任务。我们使用的TensorFlow的contrib模块下可用的DNNClassifier,如下所示:
# ------------------------------------------
# TensorFlow Implementation
# ------------------------------------------
# Extract the features from the training data
feats = tf.contrib.learn.infer_real_valued_columns_from_input(x_train)
# Building a 3-layer DNN with 50 units each.
classifier_tf = tf.contrib.learn.DNNClassifier(feature_columns=feats,
hidden_units=[50, 50, 50],
n_classes=3)
# Use the train data to train this classifier
classifier_tf.fit(x_train, y_train, steps=5000)
# Use the trained model to predict on the test data
predictions = list(classifier_tf.predict(x_test, as_iterable=True))
score = metrics.accuracy_score(y_test, predictions)
在上面的代码片段中,我们可以看到如何为数量几乎相同的行构建一个DNN(除了用于将输入数据转换为特征的附加行除外)。这个附加行完成将输入数据转换为密集、定长的浮点值。
TensorFlow迁移路径
虽然从一个框架转移到另一个框架的任务通常是令人张皇无措的,甚至有时令人沮丧,但是TensorFlow好像有些不一样,它似乎有一个桥梁,允许开发人员从不同的框架中平稳过渡。contrib.learn模块就提供了一个这样的桥梁,可以从scikit-learn或Keras进入到TensorFlow。
TensorFlow还适应于包含针对生产质量使用进行高度优化的读写器,与此同时,还支持机器学习社区使用的大多数文件格式。这使得开发人员可以避免使用其他框架,如Pandas(这是很重要的阅读文件,但仍然需要手动将数据提供到机器学习框架中。)在今年早些时候举行的TensorFlow发展峰会上,TensorFlow读写器已被证实具有十分高的性能。
在这篇文章中,我们着手研究开发一个使用scikit-learn和TensorFlow来完成一个简单任务的分类器。我们讨论了高级TensorFlowAPI与scikit-learn的API是如何相似的。你可以在我的GitHub页面访问本博客中讨论的代码。
热门文章推荐
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
今日搜狐热点怎样开始阅读scikit-learn的源码?是否值得读_百度知道
怎样开始阅读scikit-learn的源码?是否值得读
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
恭喜你意识到了sklearn的本质。答案是无法查看,因为sklearn是一个机器学习库而非统计库。对于做机器学习的人来说,显著性根本不重要,只要在testscore高就行了。真要去掉不怎么相关的feature的话,就加L1regularization
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。用 Scikit-Learn 和 Pandas 学习线性回归 - Python - 伯乐在线
& 用 Scikit-Learn 和 Pandas 学习线性回归
对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了。
1. 获取数据,定义问题
没有数据,当然没法研究机器学习啦。:) 这里我们用UCI大学公开的机器学习数据来跑线性回归。
数据的介绍在这: http://archive.ics.uci.edu/ml/datasets/Combined+Cycle+Power+Plant
数据的下载地址在这: http://archive.ics.uci.edu/ml/machine-learning-databases/00294/
里面是一个循环发电场的数据,共有9568个样本数据,每个数据有5列,分别是:AT(温度), V(压力), AP(湿度), RH(压强), PE(输出电力)。我们不用纠结于每项具体的意思。
我们的问题是得到一个线性的关系,对应PE是样本输出,而AT/V/AP/RH这4个是样本特征, 机器学习的目的就是得到一个线性回归模型,即:
PE=θ_0+θ_1*AT+θ_2*V+θ_3*AP+θ_4*RH
而需要学习的,就是θ_0、θ_1、θ_2、θ_3、θ_4这5个参数。
2. 整理数据
下载后的数据可以发现是一个压缩文件,解压后可以看到里面有一个xlsx文件,我们先用excel把它打开,接着“另存为“”csv格式,保存下来,后面我们就用这个csv来运行线性回归。
打开这个csv可以发现数据已经整理好,没有非法数据,因此不需要做预处理。但是这些数据并没有归一化,也就是转化为均值0,方差1的格式。也不用我们搞,后面scikit-learn在线性回归时会先帮我们把归一化搞定。
好了,有了这个csv格式的数据,我们就可以大干一场了。
3. 用pandas来读取数据
我们先打开ipython notebook,新建一个notebook。当然也可以直接在python的交互式命令行里面输入,不过还是推荐用notebook。下面的例子和输出我都是在notebook里面跑的。
先把要导入的库声明了:
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import pandas as pd
from sklearn import datasets, linear_model
import matplotlib.pyplot as plt%matplotlib inline&import numpy as npimport pandas as pdfrom sklearn import datasets, linear_model
接着我们就可以用pandas读取数据了:
# read_csv里面的参数是csv在你电脑上的路径,此处csv文件放在notebook运行目录下面的CCPP目录里
data = pd.read_csv('.\CCPP\ccpp.csv')
# read_csv里面的参数是csv在你电脑上的路径,此处csv文件放在notebook运行目录下面的CCPP目录里data = pd.read_csv('.\CCPP\ccpp.csv')
测试下读取数据是否成功:
#读取前五行数据,如果是最后五行,用data.tail()
data.head()
#读取前五行数据,如果是最后五行,用data.tail()data.head()
运行结果应该如下,看到下面的数据,说明pandas读取数据成功:
4. 准备运行算法的数据
我们看看数据的维度:
data.shape
data.shape
结果是(9568, 5)。说明我们有9568个样本,每个样本有5列。
现在我们开始准备样本特征X,我们用AT, V,AP和RH这4个列作为样本特征。
X = data[['AT', 'V', 'AP', 'RH']]
X = data[['AT', 'V', 'AP', 'RH']]X.head()
可以看到X的前五条输出如下:
接着我们准备样本输出y, 我们用PE作为样本输出。
y = data[['PE']]
y = data[['PE']]y.head()
可以看到y的前五条输出如下:
5.划分训练集和测试集
我们把X和y的样本组合划分成两部分,一部分是训练集,一部分是测试集,代码如下:
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
from sklearn.cross_validation import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
查看下训练集和测试集的维度:
print X_train.shape
print y_train.shape
print X_test.shape
print y_test.shape
print X_train.shapeprint y_train.shapeprint X_test.shapeprint y_test.shape
结果如下:
(2392, 1)    
(7176, 4)(7176, 1)(2392, 4)(2392, 1)    
可以看到75%的样本数据被作为训练集,25%的样本被作为测试集。
6. 运行scikit-learn的线性模型
终于到了临门一脚了,我们可以用scikit-learn的线性模型来拟合我们的问题了。scikit-learn的线性回归算法使用的是最小二乘法来实现的。代码如下:
from sklearn.linear_model import LinearRegression
linreg = LinearRegression()
linreg.fit(X_train, y_train)
from sklearn.linear_model import LinearRegressionlinreg = LinearRegression()linreg.fit(X_train, y_train)
拟合完毕后,我们看看我们的需要的模型系数结果:
print linreg.intercept_
print linreg.coef_
print linreg.intercept_print linreg.coef_
输出如下:
[[-1...0693515
[ 447.][[-1. -0.&&0.0693515&&-0.]]
这样我们就得到了在步骤1里面需要求得的5个值。也就是说PE和其他4个变量的关系如下:
PE=447..*AT-0.*V+0.0693515*AP-0.*RH
7. 模型评价
我们需要评估我们的模型的好坏程度,对于线性回归来说,我们一般用均方差(Mean Squared Error, MSE)或者均方根差(Root Mean Squared Error, RMSE)在测试集上的表现来评价模型的好坏。
我们看看我们的模型的MSE和RMSE,代码如下:
#模型拟合测试集
y_pred = linreg.predict(X_test)
from sklearn import metrics
# 用scikit-learn计算MSE
print "MSE:",metrics.mean_squared_error(y_test, y_pred)
# 用scikit-learn计算RMSE
print "RMSE:",np.sqrt(metrics.mean_squared_error(y_test, y_pred))
#模型拟合测试集y_pred = linreg.predict(X_test)from sklearn import metrics# 用scikit-learn计算MSEprint "MSE:",metrics.mean_squared_error(y_test, y_pred)# 用scikit-learn计算RMSEprint "RMSE:",np.sqrt(metrics.mean_squared_error(y_test, y_pred))
输出如下:
MSE: 20.RMSE: 4.
得到了MSE或者RMSE,如果我们用其他方法得到了不同的系数,需要选择模型时,就用MSE小的时候对应的参数。
比如这次我们用AT, V,AP这3个列作为样本特征。不要RH, 输出仍然是PE。代码如下:
X = data[['AT', 'V', 'AP']]
y = data[['PE']]
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
from sklearn.linear_model import LinearRegression
linreg = LinearRegression()
linreg.fit(X_train, y_train)
#模型拟合测试集
y_pred = linreg.predict(X_test)
from sklearn import metrics
# 用scikit-learn计算MSE
print "MSE:",metrics.mean_squared_error(y_test, y_pred)
# 用scikit-learn计算RMSE
print "RMSE:",np.sqrt(metrics.mean_squared_error(y_test, y_pred))
12345678910111213
X = data[['AT', 'V', 'AP']]y = data[['PE']]X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)from sklearn.linear_model import LinearRegressionlinreg = LinearRegression()linreg.fit(X_train, y_train)#模型拟合测试集y_pred = linreg.predict(X_test)from sklearn import metrics# 用scikit-learn计算MSEprint "MSE:",metrics.mean_squared_error(y_test, y_pred)# 用scikit-learn计算RMSEprint "RMSE:",np.sqrt(metrics.mean_squared_error(y_test, y_pred))
输出如下:
MSE: 23.RMSE: 4.
可以看出,去掉RH后,模型拟合的没有加上RH的好,MSE变大了。
8. 交叉验证
我们可以通过交叉验证来持续优化模型,代码如下,我们采用10折交叉验证,即cross_val_predict中的cv参数为10:
X = data[['AT', 'V', 'AP', 'RH']]
y = data[['PE']]
from sklearn.model_selection import cross_val_predict
predicted = cross_val_predict(linreg, X, y, cv=10)
# 用scikit-learn计算MSE
print "MSE:",metrics.mean_squared_error(y, predicted)
# 用scikit-learn计算RMSE
print "RMSE:",np.sqrt(metrics.mean_squared_error(y, predicted))
X = data[['AT', 'V', 'AP', 'RH']]y = data[['PE']]from sklearn.model_selection import cross_val_predictpredicted = cross_val_predict(linreg, X, y, cv=10)# 用scikit-learn计算MSEprint "MSE:",metrics.mean_squared_error(y, predicted)# 用scikit-learn计算RMSEprint "RMSE:",np.sqrt(metrics.mean_squared_error(y, predicted))
输出如下:
MSE: 20.RMSE: 4.
可以看出,采用交叉验证模型的MSE比第6节的大,主要原因是我们这里是对所有折的样本做测试集对应的预测值的MSE,而第6节仅仅对25%的测试集做了MSE。两者的先决条件并不同。
9. 画图观察结果
这里画图真实值和预测值的变化关系,离中间的直线y=x直接越近的点代表预测损失越低。代码如下:
fig, ax = plt.subplots()
ax.scatter(y, predicted)
ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)
ax.set_xlabel('Measured')
ax.set_ylabel('Predicted')
plt.show()
fig, ax = plt.subplots()ax.scatter(y, predicted)ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)ax.set_xlabel('Measured')ax.set_ylabel('Predicted')plt.show()
输出的图像如下:
以上就是用scikit-learn和pandas学习线性回归的过程,希望可以对初学者有所帮助。   scikit-learn中的SVM是用什么算法实现求解凸优化的_百度知道
scikit-learn中的SVM是用什么算法实现求解凸优化的
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
作为scikit-learn的一个小contributor,来简单说下个人看法吧。 首先,我认为这取决于题主本身在Python、机器学习方面的水平。因为题主没有提供这方面信息,我也只能简单介绍一下scikit-learn的现状,让题主自行判断。
采纳率:83%
来自团队:
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 scikit学习资料百度云 的文章

 

随机推荐