Question 1000207: Python里画直方图
统计/机器学习 描述性统计 数据可视化 Python请教在Python里画直方图的最简单的方法。比如我有100个点,想画成有10个组的直方图。有没有简便的方法?谢谢!
Answer
最简单的画直方图的方法是调用matplotlib.pyplot中的hist函数。如果你的数组是s,想要画有10个组的直方图,下面的代码可以达到这样的目的
import matplotlib.pyplot as plt
plt.hist(s, bins=10)
Question 1000208: 怎么求一个数组的移动平均数
统计/机器学习 数据预处理 Python在Python中,怎么求一个list或者pandas.Series一列数据的移动平均数?有现成可以直接调用的函数吗?
Answer
pandas模块里提供现成的求移动平均值的函数。如果是个list,需要先转换为pandas.Series。如果已经是pandas.Sereis类型的数据了,可以直接调用。
import pandas as pd
s = [1,2,3,5,6,10,12,14,12,30]
moving_mean = pd.Series(s).rolling(window=3).mean()
如果s已经是个pandas.Series类型的了,就直接调用
moving_mean = pd.Series(s).rolling(window=3).mean()
上面的window=3的意思是每次取三个数的平均,移动窗口的长度。
Question 1000220: 查看sklearn版本
统计/机器学习 Python我之前在Python里装了sklearn,好久不用了,怎么查看版本?
Answer
>>import sklearn
>>print('Your version is {}'.format(sklearn.__version__))
Your version is 0.18.01
这个方法也能够查其他模块的版本。
Question 1000225: python里清除已经定义过的变量
统计/机器学习 Python有时候数据特别大,内存不够,没用的变量就想先删掉了,节约点空间。请问python里怎么删除变量?
Answer
如果是想删掉某个变量x
>>>del x
如果是要删掉所有变量
>>>%reset -f
del完之后最好再gc.collect()一下,释放出空间
del my_var
import gc
gc.collect()
Question 1000254: Python计算两个数组的相关系数
统计/机器学习 描述性统计 Python我现在是自己写的小函数来计算相关系数的。Python里有没有现成的函数能够计算两个数组的相关系数的?
Answer
还有一种是numpy.corrcoef。这个可以可以求多个数组的相关系数。
比如要求a,b,c,d两两之间的相关系数。
import numpy as np
np.corrcoef([a,b,c,d])
得到一个4乘4的对称矩阵,矩阵元素就是相关系数。
>>> import scipy.stats as stats
>>> a = [1.2, 1.5, 1.9]; b = [2.2, 2.5, 3.1]
>>> stats.pearsonr(a,b)
(0.99419162560192009, 0.068648785502029797)
返回的第一个数0.99419就是a和b的相关系数。第二个数0.0686是以a和b不同为零假设下的p值。
如果数据在pandas的DataFrame里的话,可以直接调用df.corr(),这个应该是最方便的了
>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df['a'] = [1, 3, 2, 4]
>>> df['b'] = [1, 2, 3, 5]
>>> df.corr()
a b
a 1.000000 0.831522
b 0.831522 1.000000
Question 1000264: pandas.DataFrame里的loc和iloc什么区别?
统计/机器学习 Python Pandas最近在自学Python的pandas,loc和iloc搞得很头疼,一开始以为它们是一回事,所以程序老是出错,不是很明白它们的区别。希望请有经验的朋友讲一讲。谢谢!
Answer
对于一个DataFrame A,A.loc[k]是读取A中index为k的那一行。A.iloc[k]是读取A中的第k行。
假设下面的DataFrame叫A
A
Name Age
1 Tom 20
3 Tony 19
4 Jim 22
>>> A.loc[3]
Tony 19
>>>A.iloc[0]
Tom 20
>>>A.iloc[1]
Tony 19
A.loc[0]和A.loc[2]被抱错,没有index里没有0和2。同样,A.iloc[3]也会抱错,因为这里只有3行,iloc只能取到0,1,2.
Question 1000265: python里实现一个简单的决策树
统计/机器学习 监督式学习 Python才入门机器学习,对决策树只是知道概念,没有用python实现过。请问python里现成的函数或者工具包可以用决策树做分类问题吗?
Answer
绝大部分机器学习的算法都可以在sklearn这个包里面找到,也包括你说到的决策树(DecisionTree)。代码很简单,如下:
>>> from sklearn import tree
>>> clf = tree.DecisionTreeClassifier(criterion='gini')
>>> clf.fit(X,y)
>>> y_test = clf.predict(X_test)
上面的criterion='gini'表示这个决策树是根据“Gini不纯性”准则建立的;如果criterion='entropy',意思说这个决策树是根据“熵增益准则”来构建的。
fit是训练拟合这个决策树的过程,X是训练集样本(注意:不含真实标签的那一列),y是训练样本的标签。
predict是用fit出来的树来进行预测。y_test是测试集X_test中每个样本的预测结果。这个结果是0,1两元的。
如果想要得到预测为0或者为1的概率,那么最后一句话要改成
>>> y_test = clf.predict_proba(X_test)
Question 1000269: Python单侧T检验
统计/机器学习 假设检验 Pythonpython里怎么做单侧T检验?我在网上查到一个是这样的。
>>>s = [1,2,-1,2,1,-4]
>>>from scipy.stats import ttest_1samp
>>>ttest_1samp(s,0)
Ttest_1sampResult(statistic=0.1762268, pvalue=0.8670311)
上面这个代码得到的p-value是双侧T检验的。
怎么做单侧的呢?我就是单样本,零假设是均值大于0.
Answer
python的ttest_1samp同时返回T-statistic和p value。利用T检验的对称性,我们可以把双侧假设检验结果转化为单侧的。
如果T-statistic > 0,单侧pvalue = 1 - 双侧pvalue/2
如果T-statistic < 0,单侧pvalue = 双侧pvalue/2
可以根据上面的等式,自己定义个函数
def ttest_onesided(s):
from spicy.stats import ttest_1samp
(t, p) = ttest_1samp(s, 0)
if t > 0:
onesided_p = 1 - p / 2
else:
onesided_p = p / 2
return onesided_p
Question 1000280: sklearn里的RandomForestClassifier怎么选样本的数量
统计/机器学习 监督式学习 Python上课的时候老师说,随机森林(Random Forest)的随机体现在随机选择一部分特征和一部分的样本来训练很多决策树。我在试着用sklearn里的RandomForestClassifier做一次,结果并没有看到有哪个参数是对应样本的数量的。特征的数量倒是有,是max_features,默认选项是auto,就是每次选根号下总特征数个特征。那到底哪个参数是用来选随机样本的数量的呢?有点着急,谢谢了!
附上RandomForestClassifier的所有参数:
(n_estimators=10, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, min_impurity_split=1e-07, bootstrap=True, oob_score=False, n_jobs=1, random_state=None, verbose=0, warm_start=False, class_weight=None)
Answer
也许你记错了?你说的像是Boosted Trees。随机森林是会有放回地随机选取样本的,但是会选择出和原样本一样数量的样本。
举个栗子,比如你的训练集有5000行20列,我们从这5000行里进行有放回的抽样,抽出5000行,这个就是你的随机样本
Question 1000284: sklearn里LogisticRegressionCV总是报错:Expected sequence or array-like, got estimator
统计/机器学习 回归分析 模型验证 Python 损失函数我用的是sklearn里的LogisticRegressionCV,score我要用的是roc auc。我直接把代码贴在下面。
>from sklearn.linear_model import LogisticRegressionCV
>from sklearn import metrics
>clf = LogisticRegressionCV(scoring=metrics.auc)
#到这一步都没有报错
>clf.fit(x_train, y_train)
#这一步报错了
TypeError: Expected sequence or array-like, got estimator
x_train和y_train肯定没有问题,我也没有设其他参数。这是什么情况?有人遇到过吗?
Answer
scoring设置错了,sklearn上的documentation写的也不是清楚,应该是这样
>clf = LogisticRegressionCV(scoring='roc_auc')
Question 1000383: sklearn里LogisticRegressionCV中的参量Cs什么意思
统计/机器学习 回归分析 模型验证 Python这是sklearn LogisticRegressionCV文档链接。文档说了Cs是C的个数,但是这个C在模型里到底是什么意思?此外,比如我设定了Cs=15之后,这15个C是怎么产生的?
Answer
在sklearn.linear_model.LogisticRegressionCV中,C是正则惩罚项的系数倒数,C越小,惩罚越重。
对于L1惩罚(LASSO),式子如下
对于L2惩罚(Ridge),式子如下
LogisticRegressionCV中的C是根据你输入的Cs产生的。
如果Cs=10,那么先产生[-4. , -3.11, -2.22, -1.33, -0.44, 0.44, 1.33, 2.22, 3.11, 4.],然后根据这10个等距点,产生相应的10个C,[10^(-4), 10^(-3.11), ..., 10^4]。LogisticRegressionCV会自动进行交叉验证,从上面10个C里面挑出最佳的C。
【注】感谢@熊猫儿 的提醒,之前的答案不准确,现在已经更正。(2019-01-18)
Question 1000389: sklearn.decomposition.PCA方法中fit, fit_transform, transform应该怎么用
统计/机器学习 数据降维 Python我想用Python里sklearn.decomposition.PCA函数对数据进行降维。我看到有三个方法,一个是fit,一个是fit_transform,还有一个是transform,这三个到底怎么用?
Answer
fit, fit_transform, transform这三个方法用数学公式表达起来可能更直白。
假设需要被PCA的原始矩阵是$X$,$n$行$p$列,PCA的参数$n\_component = k \ll p$.
按照PCA的原理,
$$X\approx M N,$$
其中矩阵$M$是$n$行$k$列,$N$是$k$行$p$列。因为$NN^T$约等于单位矩阵,
$$M \approx XN^T,$$
$M$就是降维之后的数据,只剩下了$k$个特征。
>>> pca = sklearn.decomposition.PCA(n_components=k)
>>> pca.fit(X)
# fit就相当于求$N$的过程。
>>> M = pca.transform(X)
# transform就相当于用矩阵$N$左乘$X$,从而得到$M$。
当然这两步也可以合成一步来完成
>>> pca = sklearn.decomposition.PCA(n_components=k)
>>> M = pca.fit_transform(X)
如果你想用$X$降维的方式对另外一个数据集$S$进行降维(比如先对训练集降维,然后对测试集用一样的方式进行降维),
$$H \approx SN^T$$
那么fit和transform两个步骤就不能合并了。
>>> pca = sklearn.decomposition.PCA(n_components=k)
>>> pca.fit(X)
>>> H = pca.transform(S)
Question 1000402: python sklean中的决策树是用的哪一种决策树算法?
统计/机器学习 监督式学习 Pythonpython sklean中的决策树是用的哪一种决策树算法?是ID3还是C4.5还是CART?
我能不能指定用它用ID3而不是其他算法?
谢谢!
Answer
sklearn.tree.DecisionTreeClassifier基本上使用的是CART,稍稍有区别的是它对CART的计算性能进行了优化。
你是不可以指定它使用其他算法的。但是你可以设置sklearn.tree.DecisionTreeClassifier中criterion参数为"entropy",也就是信息增益,这样就几乎是ID3了。但是C4.5是基于信息增益率的,所以sklearn.tree.DecisionTreeClassifier做不到C4.5算法。
无法做到指定ID3和C4.5的。
sklean里的decision tree模型,不管是回归还是分类,都限制为二叉树。
而ID3和C4.5,不一定是二叉树。CART必须是二叉树。从这个角度来看,sklearn的决策树是无法完全实现C4.5和ID3的。
还有一点就是batmanX提到的splitting cirterion的问题了。
Question 1000408: python产生服从常用概率分布的随机数
统计/机器学习 概率分布 Pythonpython里也没有现成的函数能够生成服从一些常用概率分布的随机数?比如正态分布,均匀分布,卡方分布之类一系列常用的概率分布。
Answer
numpy里有现成的生成服从某个概率分布的随机变量,而且可以自己设置参数和随机数的数量。
numpy.random.beta(a, b[, size]) Beta分布随机变量
numpy.random.binomial(n, p[, size]) 二项分布随机变量
numpy.random.chisquare(df[, size]) 卡方分布随机变量
numpy.random.dirichlet(alpha[, size]) 狄利克雷分布随机变量
numpy.random.exponential([scale, size]) 指数分布随机变量
numpy.random.geometric(p[, size]) 几何分布随机变量
numpy.random.normal([loc, scale, size]) 正态分布随机变量
numpy.random.poisson([lam, size]) 泊松分布随机变量
numpy.random.uniform([low, high, size]) 均匀分布随机变量
numpy.random.wald(mean, scale[, size]) Wald分布随机变量
可以查看numpy的官方文档numpy.random文档
Question 1000411: 让DataFrame中的行按照某一列元素的绝对值从大到小排列
统计/机器学习 数据预处理 Python对于pandas.DataFrame,我想让这个df中的行按照某一列,比如说col_a中元素的绝对值的大小,从大到小排列,该怎么操作?
Answer
假如你的pd.DataFrame是df,你想按照col_1中的数值对df重新排列
降序排列(从大到小)
df.reindex(df['col_1'].abs().sort_values(ascending=False).index)
升序排列(从小到大)
df.reindex(df['col_1'].abs().sort_values(ascending=True).index)
例
>>> df
col_1 col_2
0 2 1
1 4 3
2 -3 5
3 -5 7
>>> df.reindex(df['col_1'].abs().sort_values(ascending=False).index)
col_1 col_2
3 -5 7
1 4 3
2 -3 5
0 2 1
Question 1000413: 单元根检验的实现
统计/机器学习 假设检验 时间序列 Python我想用单元根检验来判断一个时间序列是否平稳,python里什么好的实现方式?
谢谢!
Answer
有现成的package
>>> from statsmodels.tsa.stattools import adfuller
>>> adfuller(x)
这样可以判断x是否稳定
Question 1000420: pip install opencv报错
统计/机器学习 深度学习 计算机视觉 Python用pip安装opencv报错
$ pip install opencv
No matching distribution found for opencv
有人了解这是哪里错了么
Answer
pip install opencv-python
安装好之后
import cv2
Question 1000430: sklearn OneHotEncoder string类型报错
统计/机器学习 数据预处理 Python我的数据集里面,有的变量是categorical的,比如国家,所以我需要做One Hot Encoding。
但是用OneHotEncoder会报错。
>>> from sklearn.preprocessing import OneHotEncoder
>>> enc = OneHotEncoder(categorical_features=['a'])
>>> new_df = enc.fit_transform(df)
ValueError: could not convert string to float
这个错误是什么意思?难道sklearn.preprocessing.OneHotEncoder只认识数值的?不能处理字符串类型的?
Answer
可以用pandas的get_dummies
df[feature] = df['country'].astype('category')
df = pandas.get_dummies(df, columns=['country'])
Question 1000437: pandas.DataFrame选取最后k行
统计/机器学习 Python Pandas怎么取出pandas.DataFrame的最后k行?
正在从R转Python,问题有些低级,请见谅!
Answer
假如你的pd.DataFrame的名字是df,提取最后10行
>>> df.tail(10)
提取最后k行
>>> df.tail(k)
df.iloc[-k:]
Question 1000441: sklearn.metric.auc函数计算出的结果很奇怪
统计/机器学习 模型验证 Python 损失函数我用sklearn.metric.auc计算二元分类的roc auc,但是结果非常诡异,居然是小于0.5的。
然后我随便试了一个
>>> from sklearn.metrics import auc
>>> y_actual = [0, 0, 1]
>>> y_pred = [0.1, 0.2, 0.9]
>>> auc(y_actual, y_pred)
0.34999999999999
这个分类结果的auc明明是1才对,返回了一个小于0.5的数。有谁知道为什么吗?
Answer
sklearn.metric.roc_auc_score才是计算ROC AUC的。
>>> y_actual, y_pred = [0, 0, 1], [0.2, 0.1, 0.9]
>> sklearn.metric.roc_auc_score(y_actual, y_pred)
1
你所用的sklearn.metrics.auc(x,y)是计算折线与x轴之间的面积,x是折线上点的横坐标,y是折线上点的纵坐标。
>>> x = [0, 1]
>>> y = [1, 1]
>>> sklearn.metrics.auc(x, y)
1
Question 1000448: pandas DataFrame删除列的操作
统计/机器学习 数据预处理 Python Pandas对于一个pandas.DataFrame,比如说df里有五列,列名分别是,'a', 'b', 'c', 'd', 'e'。如果我想删除其中的'c'列和'e'列,我该怎么操作?
Answer
df = df.drop(['c', 'e'], axis=1)
或者
df.drop(['c', 'e'], axis=1, inplace=True)
Question 1000455: 两个向量的余弦距离大于1?
统计/机器学习 推荐系统 Python我需要计算推荐系统里面两个条目的相似程度,我采用余弦距离。
在python里调用了scipy
>>> from scipy.spatial import distance
>>> a = [-1, -2, 3]
>>> b = [2, 1, -2]
>>> distance.cosine(a,b)
1.8908708063747479
这个向量a和b的夹角余弦大于1了?这个是什么情况?哪里错了吗?
Answer
你说的是cosine distance还是cosine similarity.
distance.cosine(a,b)是计算余弦距离的
1 - distance.cosine(a,b)是计算余弦相似的。
>>> from scipy.spatial import distance
>>> a = [-1, -2, 3]
>>> b = [2, 1, -2]
>>> 1 - distance.cosine(a,b)
-0.890870806374747
Question 1000472: 返回DataFrame或者array的行数
统计/机器学习 Python Pandas在python里,怎么求一个pandas.DataFrame或者numpy.array有多少行?
Answer
更推荐len(df)
len(df)比df.shape[0]快20%到50%。虽然它们都已经非常快了。
如果你的Pandas.DataFrame叫做df
求行数
>>> df.shape[0]
求列数
>>> df.shape[1]
对于一个array对象a,也一样
>>> a.shape[0]
Question 1000477: sframe和pandas.DataFrame哪个好用?
统计/机器学习 开放问题 Python我一般都是用pandas.DataFrame。最近听不少人说sframe,不知道有没有人对两个都熟悉的,能讲一讲它们各自的优势和缺陷吗?
Answer
pandas的DataFrame和graphlab的SFrame,我个人觉得pandas更常用一些。但是它们虽然都是提供了dataframe这种数据结构,但是本质上还是有很多不同的地方的。
1. 存储方式。pandas.DataFrame必须存储在内存当中;而SFrame可以选择存在内存或者硬盘空间上。所以SFrame可以放下更大的数据,其实S就是指的scability,可延展性。
2. DataFrame是可变的,SFrame却不是。换句话说,当我们建立好一个SFrame之后,其中的数值就不能被修改了。
3. SFrame只支持64位CPU,只支持python2.7。而DataFrame没有这些限制。
4. 用法不完全一样。具体可以参考这里。
你们都是土豪么?
最大的区别难道不是GraphLab SFrame是付费的,Pandas是免费的么?
pandas.DataFrame放在内存里,读取也快。
SFrame更适合大数据,比如1T以上的那种,可以放在磁盘空间上,所以读取也相对较慢。
Question 1000491: pandas怎么把字符串'yyyymmdd'转换为时间对象
统计/机器学习 数据预处理 时间序列 Python Pandas我的pandas.DataFrame里有一列数据用来记录时间,但是是'20170320'这样的字符串结构,怎么把这一列转换为时间对象?
Answer
>>> df
val date
0 3 20170401
1 1 20170402
2 4 20170403
3 5 20170404
4 0 20170405
>>> df['date'] = df['date'].apply(pd.to_datetime)
Question 1000493: sklearn cross_val_score中的参数pre_dispatch
统计/机器学习 模型验证 Python我用sklearn中的cross_val_score对classifier进行交叉验证,我设置的是12-fold,n_jobs=3,结果内存爆掉了。我查了一下,cross_val_score里的pre_dispatch或许能够解决内存不足的问题。但是反复看cross_val_score documentation,没看懂这个pre_dispatch到底是什么意思,怎么用。
有人设置过这个参数吗?到底怎么设置?
谢谢!
Answer
你的设置是cv=12, n_jobs=3,也就是用三个处理器(记为CPU_A, CPU_B, CPU_C),进行12次cross validation(记为CV_1, CV_2, CV_3, ..., CV_12)。pre_dispatch是预派遣的意思,就是提前先把任务派遣给各个处理器。
如果我们没有设置cross_val_score中的参数pre_dispatch,当我们开始执行cross_val_score,程序会一次性把全部12个CV都派遣出去,每个处理器领到4个CV。要特别注意了,这里的派遣并不是口头的安排任务,而是把任务和任务对应的数据(划重点)也发送给处理器。比如说,CPU_A领到了CV_1, CV_4, CV_7, CV_10,那么CPU_A就领到了四份训练数据集、四份测试集存放在内存里(又是重点),然后CPU_A开始依次完成CV_1, CV_4, CV_7, CV_10。
如果我们设置pre_dispatch=‘2*n_jobs’,当我们开始执行cross_val_score,程序会派遣6个CV出去,每个处理器领到2个CV。所以一开始每个处理器只需要存两份训练集、测试集(划重点)。比如说CPU_A领到了CV_1和CV_4,CPU_B领到了CV_2和CV_5,CPU_C领到了CV_3和CV_6,如果CPU_B率先完成了CV_2,那么系统会自动把CV_7派遣给CPU_B,节奏CPU_A完成了CV_1,系统再把任务CV_8放在CPU_A的任务队列里。pre_dispatch=‘2*n_jobs’的意思就是保持每个CPU都有两个任务在身(一个在做,一个在排队),除非所有任务都被派遣出去了。
如果我们设置pre_dispatch=‘1*n_jobs’,这样占用的内存最低,因为只有当当前的任务完成之后,才会有新任务(数据)派遣到闲置处理器,而非将数据放在队列中等待。
Question 1000498: python画散点图
统计/机器学习 数据可视化 Pythonpython里怎么画散点图?最好是三维的散点图,用散点的直径大小来表示第三维。
谢谢!
Answer
matplotlib.pyplot模块中的scatter
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> x = range(20)
>>> y = np.sqrt(x)
>>> z = np.random.uniform(30, 200, 20)
>>> plt.scatter(x, y, s=z, c='r', alpha=0.4, lw=0)
x是散点的横坐标
y是散点的纵坐标,我输入的是根号x
s是表示每个点的大小,这里我输入了一个随机产生的大小
c表示颜色,我设置为红色
alpha表示透明度,1是不透明,0是全透明
lw表示每个点边界线的宽度,我设置为0
最后得到了如下散点图
Question 1000509: matplotlib.pyplot画图的标题中插入变量
统计/机器学习 数据可视化 Python我用matplotlib.pyplot画图,然后给图加标题的时候,怎么在标题里插入变量?
import matplotlib.pyplot as plt
plt.plot(x, y)
plt.tittle("Results of Iteration k")
我这个k是循环里的变量,每次都不一样的。怎么在标题里插入变量?
Answer
这个和在string里插入变量是一样的,在标题里用%s代替变量,具体可以看下面的例子
import numpy as np
import matplotlib.pyplot as plt
k = 2
x = np.array([1, 2, 3, 4, 5])
y = k * x
plt.figure()
plt.plot(x, y)
plt.title("The slope of the line is %s and the max of y is %s"%(k, max(y)))
Question 1000518: sklearn模块里的DecisionTreeClassifier为什么每次结果不同(数据相同的情况下)
统计/机器学习 监督式学习 Python我用sklearn里的DecisionTreeClassifier,发现每次结果(预测结果和score)都有稍微不同,模型参数和数据每次都是一样的。这是bug么?源代码不稳定?
Answer
sklearn.tree.DecisionTreeClassifier(criterion='gini', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_split=1e-07, class_weight=None, presort=False)
这个是sklearn.tree.DecisionTreeClassifier的全部参数,其中有一项是random_state,如果你没有特地设定这个数值的话,决策树是有随机性的。
-------------------------来个分界线--------------------------
在sklearn的记录文档里是这么写的,考虑到数值特征的存在,训练一个最优的决策树是NP-complete。因此比较实际的做法是努力去找一个比较优的,而不是最优的。比如用贪婪算法,随机地从一些特征开始建立次优化的决策树,再从这些树中选择最好的,这样的树能达到较优。
Question 1000520: sklearn.linear_model.SGDClassifier中的参数n_iter设置问题
统计/机器学习 监督式学习 Pythonn_iter是循环次数的意思,应该是越大越好的。我设置n_iter=100,程序跑了很久,n_iter=100000,根本就跑不出来了,等了十几个小时了,为什么这么久,SGD的优势不是速度吗?
我又试了n_iter=1,就是只用一个数据点,按照预期,应该是立即出结果,结果很差。实际上是依然等了一会,而且结果并不离谱。
所以这个n_iter到底怎么用?
Answer
n_iter其实是epoch的意思。
比如你的训练集样本数量是10000,那么你实际的训练次数是10000 * n_iter,而不是n_iter。所以如果你设置n_iter=100000的话,就需要很久很久才能跑完了。
这个n_iter和训练神经网络时的epoch是一个意思
Question 1000532: pandas.DataFrame更改列名
统计/机器学习 Python Pandas怎么修改pandas.DataFrame的列名?
Answer
# 显示df每列的名称
>>> df.columns.values
# 将第三列的列名改为'new name'
>>> df.rename(columns={ df.columns[2]: "new name" }, inplace=True)
# 假如df一共有三列,你想把所有列名依次改为'col_1', 'col_2', 'col_3'
>>> df.columns = ['col_1', 'col_2', 'col_3']
假设你的df里有一列叫做'col_1',如果你想把这列的名字改成'col_a',那么可以这样
df = df.rename(columns={'col_1': 'col_a'})
Question 1000542: pandas dataframe选择第k行
统计/机器学习 Python Pandas对于pandas模块dataframe,怎么选取其中的第k行?
Answer
选取第k行的代码为
df.iloc[k, :]
注意pandas的排序是从0开始的,也就是说首行是第0行。
这样返回的是一个Series,如果想要list,可以train.iloc[k].tolist()
df.loc[k]
Question 1000562: 怎么在已有的dataframe中插入一个新列(Pandas)
统计/机器学习 Python Pandas我有个dataframe,叫做df,我现在想往df1里插入一列数据,数据我已经有了存在numpy.array里,列名可以叫做'flag',怎么添加这一列数据到df里呢?
Answer
一行代码就可以完成
df['flag'] = my_array
df.insert(idx, col_name, value)
比如说想把flag插在最前面一列
>>> df.insert(0, 'flag', my_array)
比如说想把flag插在第三列的位置上
>>> df.insert(2, 'flag', my_array)
Question 1000574: sklearn里learning_rate什么意思?
统计/机器学习 监督式学习 PythonAnswer
learning rate,学习率,顾名思义就是模型学习训练集的速度,或者说模型被训练的速度。
learning rate越大,训练得越快;反之,越慢。
learning rate通常是针对于基于梯度下降的机器学习模型,具体说来这个学习率就是梯度下降的步长。对于凸优化,一般说来步长越小收敛越慢;对于非凸问题,learning rate就不是那么直截了当的了。选太小了,训练太慢,影响这个模型的进度,选太大了,可能一步跨过去,错过了最优点。
现在有很多模型能够根据数据的特点自动选择学习率。如果你要手动设置的话,根据我个人的经验0.00001到0.1的范围比较常见,有时候你甚至需要通过交叉验证来最后确定学习率。
就是梯度下降里的步长
仅此而已
Question 1000577: python里什么模块可以计算精度-召回(precision-recall)的AUC?
统计/机器学习 Python 损失函数python里什么模块可以计算精度-召回(precision-recall)的AUC?
Answer
使用sklearn.metrics.average_precision_score
>>> import numpy as np
>>> from sklearn.metrics import average_precision_score
>>> y_true = np.array([0, 0, 1, 1])
>>> y_predict = np.array([0.1, 0.4, 0.35, 0.8])
>>> average_precision_score(y_true, y_predict)
0.791666666
Question 1000582: 怎么合并(串联)两个dataframe?
统计/机器学习 Python我有两个pandas的DataFrame,df1,df2,我想把它们合并
>>> df1
height weight
0 174 145
1 182 158
2 170 150
>>> df2
height weight
0 165 95
1 162 108
2 170 112
我想得到的DataFrame是这样的
height weight
0 174 145
1 182 158
2 170 150
3 165 95
4 162 108
5 170 112
这样子合并该怎么操作?
Answer
>>> df_combine = pd.concat([df1, df1], ignore_index=True)
Question 1000584: sklearn.cluster.KMeans用的哪种距离?
统计/机器学习 无监督学习 Pythonsklearn.cluster.KMeans默认用的哪种距离?是欧氏距离吗?KMeans的documentation里也并没有提到如何设置distance的种类。不知道能不能用其他距离。
Answer
Question 1000593: map lambda if逗号报错,invalid syntax
统计/机器学习 Python我想把数组my_list变形,如果元素在target里,那么这个元素就被替换成0,否则就不变。
>>> my_list = [1, 2, 3, 5, 7, 3, 8, 2, 9]
>>> target = [1, 3, 8]
# 变形后应该得到 [0, 2, 0, 5, 7, 0, 0, 2, 9]
>>> a = map(lambda x: 0 if x in target, a)
在逗号报错,SyntaxError: invalid syntax
Answer
这个不是map的问题,是你的lambda语句出错了。
在lambda语句中,如果使用if,那必须要给出else。
a = map(lambda x: 0 if x in target else x, a)
Question 1000600: sklearn中的predict_proba方法的返回值的意义
统计/机器学习 监督式学习 Python我用sklearn模块进行退货预测,我调用predict_proba以后,发现返回给我的不是概率向量(我有n个预测样本),而是一个n行2列的矩阵,
这个矩阵是什么意思?这个predict_proba返回的是什么概率?
Answer
predict_proba返回的是一个n行k列的数组,第i行第j列上的数值是模型预测第i个预测样本的标签为j的概率。所以每一行的和应该等于1.
举个例子
>>> from sklearn.linear_model import LogisticRegression
>>> import numpy as np
>>> x_train = np.array([[1,2,3],
[1,3,4],
[2,1,2],
[4,5,6],
[3,5,3],
[1,7,2]])
>>> y_train = np.array([0, 0, 0, 1, 1, 1])
>>> x_test = np.array([[2,2,2],
[3,2,6],
[1,7,4]])
>>> clf = LogisticRegression()
>>> clf.fit(x_train, y_train)
# 返回预测标签
>>> clf.predict(x_test)
array([1, 0, 1])
# 返回预测属于某标签的概率
>>> clf.predict_proba(x_test)
array([[ 0.43348191, 0.56651809],
[ 0.84401838, 0.15598162],
[ 0.13147498, 0.86852502]])
预测[2,2,2]的标签是0的概率为0.43348191,1的概率为0.56651809
预测[3,2,6]的标签是0的概率为0.84401838,1的概率为0.15598162
预测[1,7,4]的标签是0的概率为0.13147498,1的概率为0.86852502
对于一个k元分类
probas = clf.predict_proba(test)
probas是一个k列的array
probas[:, j]这一列是每个test样本为j的概率。
probas[i, j]是预测第i个样本的标签为j的概率。
Question 1000612: python里怎么实现t-SNE降维?
统计/机器学习 数据降维 Pythonpython里怎么实现t-SNE降维?
Answer
万能的sklearn里有TSNE函数。
用法和sklearn.decomposition.PCA是一样的。
>>> from sklearn.manifold import TSNE
>>> model = TSNE(n_components=2, random_state=0)
>>> data_reduaced = model.fit_transform(data)
n_components = p 的意思就是说把数据降到只有p维。
Question 1000618: python里把数据中某一列中的na,nan,缺失值都替换成0?
统计/机器学习 数据预处理 Python Pandas我想把我dataframe中其一列里所有的na,nan,缺失值都替换成0,有什么快捷的操作吗?(不跑循环的那种)
谢谢!
Answer
pandas里有fillna
df['my_col'].fillna(0, inplace=True)
Question 1000631: dataframe每行或者每列中缺失值(na, nan, null)的个数
统计/机器学习 数据预处理 Python根据常用的缺失值的处理方法,我想先看看我的df里每行和每列缺失值的个数?这个在python或者pandas里有没有快捷地数个数的方法?
Answer
返回每行缺失值的总数
df.isnull().sum(axis=1)
返回每列缺失值的总数
df.isnull().sum(axis=0)
>>> df.count() #按照列来数非缺失值的个数
>>> df.count(axis=1) #按照行来数非缺失值的个数
例子:
>>> df
a c b
0 1 3 NaN
1 2 5 0
2 3 NaN NaN
3 4 NaN 0
# 每列缺失值的个数
>>> df.shape[0] - df.count()
a 0
b 2
c 2
# 每行缺失值的个数
>>> df.shape[1] - df.count(axis=1)
0 1
1 0
2 2
3 1
Question 1000639: python中计算加权平均
统计/机器学习 Pythonpython里如何计算加权平均?
比如我有两个list
value = [1, 2, 3, 4]
weights = [0.1, 0.4, 0.3, 0.8]
value和weights是一一对应着的。除了跑循环,有什么现成求加权平均的吗?
Answer
numpy.average(x, weights=y)可以算加权平均
根据你的变量,就是
>>> import numpy as np
>>> np.average(value, weights=weights)
Question 1000649: pandas.DataFrame的index重新排列(从0开始)
统计/机器学习 Python我选取了一个DataFrame的一部分数据得到了df1,但是index还是原来df的index,我想让新的df的index重新按照从0开始计数。比如说,我的df1是这样的
>>> df1
col1 col2
2 0.5 0.9
6 1.1 3.2
11 2.1 0.5
我希望的是
>>> df1
col1 col2
0 0.5 0.9
1 1.1 3.2
2 2.1 0.5
请问这该如何操作呢?
Answer
重新赋值pandas.DataFrame.index即可。
df1.index = range(len(df1))
>>> df1.reset_index(drop=True, inplace=True)
Question 1000668: python怎么读取txt格式的数据文件?
统计/机器学习 Python I/O请问,python怎么读取txt格式的数据文件?
Answer
最方便的是用pandas.read_table
>>>import pandas as pd
# 如果数据是空格分隔的
>>>data = pd.read_table("file.txt", spe=" ")
# 如果数据是逗号分隔的
>>>data = pd.read_table("file.txt", spe=",")
# 如果数据是制表符分隔的
>>>data = pd.read_table("file.txt", spe="\t")
Question 1000682: matplotlib.pyplot画图怎么添加横轴,纵轴的名字?
统计/机器学习 数据可视化 Python用python里的matplotlib.pyplot画图,想要在图上的坐标轴上出现对应的名称,例如下图。
相关的命令是什么?谢谢!
Answer
>>> import matplotlib.pyplot as plt
>>> plt.figure(); plt.plot(x,y);
plt.xlabel('this is x-axis'); plt.ylabel('thi is y-axis'); plt.show()
Question 1000683: sklearn cross_val_score怎么同时对多个scoring进行验证
统计/机器学习 模型验证 Python我想同时验证两个scoring,但是cross_val_score好像一次只能设定一个。
我可以分别跑两次,
>>> cross_val_score(clf, X, y, scoring='log_loss')
>>> cross_val_score(clf, X, y, scoring='roc_auc')
但是太浪费时间了,我跑一次就需要3个小时,而且我的模型是一样的,只是想看这个模型在不同scoring下的分数。
有没有什么办法,能够实现类似
>>> cross_val_score(clf, X, y, scoring=[score1, score2, score3])
这样的功能?
Answer
cross_val_score是无法做到一次交叉验证,同时返回多个不同的loss的。sklearn也许以后会增加这种功能,但是目前看来,下一版本还不会。
目前可行的方案,是使用sklearn.model_selection.cross_val_predict。
y_cv = cross_val_predict(clf, X, y)
roc_auc = metrics.roc_auc_score(y, y_cv)
logloss = metrics.log_loss(y, y_cv)
pr_auc = metrics.average_precision_score(y, y_cv)
... ...
这样的话,只需要做一次交叉训练,节约了时间。缺点就是无法知道每个fold的loss的数值。
写个循环就搞定了
for my_score in [score1, score2, score3, score4]:
print cross_val_score(clf, X, y, my_score)
Question 1000698: python怎么画excel里那种双y轴的图?
统计/机器学习 数据可视化 Pythonpython怎么画excel里那种双y轴的图?类似这样的,左边和右边各一个纵轴
Answer
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 10, 0.1)
y1 = x ** 2
y2 = - x ** 3
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.plot(x, y1, 'r-')
ax2.plot(x, y2, 'b-')
ax1.set_xlabel('X data')
ax1.set_ylabel('square of x', color='r')
ax2.set_ylabel('negative cube of x', color='b')
plt.title('double y-axes example')
plt.show()
Question 1000704: Tensorflow多层神经网络训练最后输出的值都一样的,找不到是什么原因?
统计/机器学习 深度学习 Python 人工神经网络 TensorFlow我tensorflow建立6层全连接神经网络,网络的输入数据2625 个,输出数据1个。理想情况下输出数据应该按照一定规规律随着输入数据的变化而变化的,但是训练到最后,无论输入数据是多,输出数据都是一个数值,loss在来回跳动,没有减小。
我的模型代码如下:
import sys
sys.path.insert(0, '/home/wcsmomo/workspace/tutorials')
#from __future__ import print_function, division
import tensorflow as tf
from sklearn.metrics import confusion_matrix
import numpy as np
from my_ant_v3 import FetchDataSets as fds
import DBUtil as dbu
from my_ant_v3 import ant_loger
class Network():
def __init__(self, num_hidden, num_hidden_2, num_hidden_3, num_hidden_4 , num_hidden_5, batch_size ):
self.batch_size = batch_size
self.test_batch_size = batch_size
# Hyper Parameters
self.num_hidden = num_hidden
self.num_hidden_2 = num_hidden_2
self.num_hidden_3 = num_hidden_3
self.num_hidden_4 = num_hidden_4
self.num_hidden_5 = num_hidden_5
# Graph Related
self.graph = tf.Graph()
self.tf_train_samples = None
self.tf_train_labels = None
self.tf_test_samples = None
self.tf_test_labels = None
self.tf_test_prediction = None
def define_graph(self):
with self.graph.as_default():
self.tf_train_samples = tf.placeholder(tf.float32, shape=(self.batch_size, 375*7))
self.tf_train_labels = tf.placeholder(tf.float32, shape=(self.batch_size, 1))
self.tf_test_samples = tf.placeholder(tf.float32, shape=(self.test_batch_size, 375*7))
self.tf_test_labels = tf.placeholder(tf.float32, shape=(self.test_batch_size, 1))
# fully connected layer 1, fully connected
fc1_weights = tf.Variable(tf.truncated_normal([375*7, self.num_hidden], stddev=0.1))
fc1_biases = tf.Variable(tf.constant(0.0, shape=[self.num_hidden]))
# fully connected layer 2
fc2_weights = tf.Variable(tf.truncated_normal([self.num_hidden, self.num_hidden_2], stddev=0.1))
fc2_biases = tf.Variable(tf.constant(0.0, shape=[self.num_hidden_2]))
# fully connected layer 3
fc3_weights = tf.Variable(tf.truncated_normal([self.num_hidden_2, self.num_hidden_3], stddev=0.1))
fc3_biases = tf.Variable(tf.constant(0.0, shape=[self.num_hidden_3]))
# fully connected layer 4
fc4_weights = tf.Variable(tf.truncated_normal([self.num_hidden_3, self.num_hidden_4], stddev=0.1))
fc4_biases = tf.Variable(tf.constant(0.0, shape=[self.num_hidden_4]))
# fully connected layer 5
fc5_weights = tf.Variable(tf.truncated_normal([self.num_hidden_4, self.num_hidden_5], stddev=0.1))
fc5_biases = tf.Variable(tf.constant(0.0, shape=[self.num_hidden_5]))
# fully connected layer 6 --> output layer
fc6_weights = tf.Variable(tf.truncated_normal([self.num_hidden_5, 1], stddev=0.0))
fc6_biases = tf.Variable(tf.constant(0.0, shape=[1]))
def model(input_data):
hidden = tf.nn.relu(tf.matmul(input_data, fc1_weights) + fc1_biases)
hidden = tf.nn.dropout(hidden, 0.75)
# fully connected layer 2
hidden_2 = tf.nn.relu(tf.matmul(hidden, fc2_weights) + fc2_biases)
hidden_2 = tf.nn.dropout(hidden_2, 0.75
# fully connected layer 3
hidden_3 = tf.nn.relu(tf.matmul(hidden_2, fc3_weights) + fc3_biases)
hidden_3 = tf.nn.dropout(hidden_3, 0.75)
# fully connected layer 4
hidden_4 = tf.nn.relu(tf.matmul(hidden_3, fc4_weights) + fc4_biases)
hidden_4 = tf.nn.dropout(hidden_4, 0.75)
# fully connected layer 5
hidden_5 = tf.nn.relu(tf.matmul(hidden_4, fc5_weights) + fc5_biases)
return tf.matmul(hidden_5, fc6_weights) + fc6_biases
# Training computation.
self.logits = model(self.tf_train_samples)
self.loss = tf.reduce_mean(tf.squared_difference(self.logits, self.tf_train_labels))
# Optimizer.
#self.optimizer = tf.train.RMSPropOptimizer(0.00005).minimize(self.loss)
#self.optimizer = tf.train.AdadeltaOptimizer(0.00005).minimize(self.loss)
self.optimizer = tf.train.AdagradOptimizer(0.00001).minimize(self.loss)
#self.optimizer = tf.train.AdamOptimizer(0.00005).minimize(self.loss)
# Predictions for the training, validation, and test
self.test_prediction = model(self.tf_test_samples)
def run(self):
loger = ant_loger.Loger("/home/wcsmomo/workspace/tutorials/ant.log")
self.session = tf.Session(graph=self.graph)
with self.session as session:
session.run(tf.global_variables_initializer())
saver = tf.train.Saver()
i = 0
count = 0
ck = fds.CreateKindleLines(self.batch_size, data_type='train')
test_ck = fds.CreateKindleLines(self.test_batch_size, data_type='test')
while i < ck.avg_k_count:
if i == ck.avg_k_count -1 :
i = 0
ck.k = 0
test_ck.k = 0
i +=1
count +=1
bat_x,bat_y = ck.fetch_batch_slope_continue_time()
bat_x = np.reshape(bat_x , [self.batch_size,2625])
bat_y = np.reshape(bat_y, [self.batch_size, 1])
logits = session.run(self.logits , feed_dict={self.tf_train_samples:bat_x, self.tf_train_labels:bat_y})
#print(logits)
_, los = session.run([self.optimizer, self.loss], feed_dict = {self.tf_train_samples:bat_x, self.tf_train_labels:bat_y})
if i % 10 == 0:
test_bat_x, test_bat_y = test_ck.fetch_batch_slope_continue_time()
test_bat_x = np.reshape(test_bat_x, [self.test_batch_size, 2625])
test_bat_y = np.reshape(test_bat_y, [self.test_batch_size, 1])
pred = session.run(self.test_prediction,
feed_dict={self.tf_test_samples:test_bat_x, self.tf_test_labels:test_bat_y})
#accuracy = self.accuracy(pred, test_bat_y, True);
loger.info("bat_y: "+str(bat_y))
loger.info("pred: "+str(pred))
print(bat_y)
print(pred)
print('Minibatch loss at step %d lost: %f' % (i, los))
#print('Minibatch accuracy: %.1f%%' % accuracy[0])
if count % 100 == 0 and self.is_save():
path = '/home/wcsmomo/workspace/MultLayerNet.ckpt'
save_path = saver.save(self.session, path)
print("save_path:" , save_path)
def accuracy(self, predictions, labels, need_confusion_matrix=False):
'''
@return: accuracy and confusionMatrix as a tuple
'''
_predictions = np.argmax(predictions, 1)
_labels = np.argmax(labels, 1)
cm = confusion_matrix(_labels, _predictions) if need_confusion_matrix else None
# == is overloaded for numpy array
accuracy = (100.0 * np.sum(_predictions == _labels) / predictions.shape[0])
return accuracy, cm
def is_save(self):
conn = dbu.Conn().get_conn()
sql = "select value from ba_site where key_name='IS_SAVE'
cur = conn.cursor()
cur.execute(sql)
results = cur.fetchall()
flg = results[0][0]
flg_bl = flg == 'Y'
return flg_bl
if __name__ == '__main__':
net = Network(num_hidden=3000 , num_hidden_2=1000,
num_hidden_3=500, num_hidden_4=200, num_hidden_5=50,
batch_size=100)
net.define_graph()
net.run()
Answer
遇到了这个问题,我的loss值最开始是在比较大的值上一直无法收敛,查看网络权值梯度,最开始的梯度返回已经是e-3级别了,因此网络基本没调整。
目前知道的方法有:
初始化不对,查看每层网络的输入方差,如果方差越来越小,可以判定为初始化不对,而你的初始化也是采用的基本的高斯函数,有很大可能是初始化的问题;
采用BN(批量标准化),可以稍微降低初始化对网络的影响;
如果你有更好的办法,求告知。
好长好长的code。我没有逐行看,但是有几个可能性:
1、你的预测输出标签,而不是概率。如果你的数据是非常倾斜,1:20什么的,基本上不管怎么预测,预测标签都会是0。
2、你的bias项一直都是0,tf.Variable(tf.constant(0.0, shape=[self.num_hidden]))。这也许是一个可能。
3、你的模型层数比较多,激活函数都是一样的。可以试试两层、三层的,效果如何。也可以换个激活函数试试。
这可能是没有对数据进行正则化导致的,在很简单的模型上能重现类似的问题。
Question 1000710: 调用sklearn中的classification_report,ValueError: Mix type of y not allowed, got types set(['binary', 'continuous'])
统计/机器学习 模型验证 Python最近在学习机器学习的一些算法,在弄决策树的时候报了错
print classification_report(y,answer,target_names=['up','down'])
File "G:\Anaconda2\lib\site-packages\sklearn\metrics\classification.py", line 1391, in classification_report
labels = unique_labels(y_true, y_pred)
File "G:\Anaconda2\lib\site-packages\sklearn\utils\multiclass.py", line 84, in unique_labels
raise ValueError("Mix type of y not allowed, got types %s" % ys_types)
ValueError: Mix type of y not allowed, got types set(['binary', 'continuous'])
我google一下,发现是说y的元素值类型都要一致才可以,但是我遍历了y,所有的元素都是
np.float64的类型,并不存在类型不一致的问题呀
Answer
classification_report(y,answer,target_names=['up','down'])中y必须是整数型,answer也必须是整数型,估计你里面有小数。
你可以这样试试
>>> y = list(map(lambda x: int(x), y))
>>> answer = list(map(lambda x: int(x), answer))
>>> print(classification_report(y,answer,target_names=['up','down']))
Question 1000728: 请问python已知某个元素,怎么得到该元素在dataframe中的位置
统计/机器学习 Python大家好,请问python已知某个元素,怎么得到该元素在dataframe中的位置
比如dataframe名字是df,那么df.iloc(0,0)为左上角第一个位置内的元素‘你好’,那么已知‘你好’,怎么得到(0,0)的坐标呢
Answer
Pandas似乎更喜欢loc,而非iloc。对于pandas.Series有可以得到loc的方法(get_loc),但是没有iloc的方法;对于pandas.DataFrame似乎更没有了。
我的建议就是直接写循环吧。
for i in range(df.shape[0]):
for j in range(df.shape[1]):
if df.iat[i, j] == '你好':
print (i, j)
break
.iat比iloc大概快两倍,但是缺点是不能multi-indexing,不过这个问题中不影响。这里推荐用.iat。
Question 1000732: tf.placeholder和tf.variable什么区别?
统计/机器学习 Python TensorFlow最近开始学习tensorflow。一开始就有点懵,这个tf.placeholder和tf.variable有什么区别?感觉都是声明变量用的。
有知道的朋友可以具体解释一下吗?谢谢!
Answer
tf.placeholder在声明的时候不需要初始化的数值,只需要声明类型和维数,例如
x = tf.placeholder(tf.float32, shape=(None, 1024))
tf.placeholder是为了方便定义神经网络结构,所以可以看作是符号变量。tf.placeholder通常是在训练session开始后,存放输入样本的。
tf.Variable在声明的时候必须要有初始的数值。例如
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),name="weights")
biases = tf.Variable(tf.zeros([200]), name="biases")
tf.Variable通常是存放weight和bias,然后会不停地被更新,所以说是variable。
Question 1000736: python里有没有类似excel里的那种数据透视表?
统计/机器学习 Pythonpython里有没有类似excel里的那种数据透视表?
Answer
Question 1000737: python里怎么做分位数回归(quantile regression)?
统计/机器学习 回归分析 Pythonpython里怎么做分位数回归(quantile regression)?有现成的包吗?似乎sklearn里并没有。
Answer
Question 1000759: tensorflow里面怎么自定义一个loss function?
统计/机器学习 Python 损失函数 TensorFlow我的模型的loss function是自己设计的,有没有人了解tensorflow里面怎么自定义一个loss function?
Answer
有两个办法:
其一、你自己用C++写一个。你需要把tensorflow的源代码下载下来,然后自己用C++写一个函数。可参考Adding an op。
其二、你把你自己定义的损失函数用tensorflow中的标准函数表示出来。比如你需要MSE(虽然这个已经有了),可以写成
loss = tf.reduce_mean(tf.square(tf.sub(y_real, y_pred)))
比如说你有一个function: f(x1,x2) = exp(x1)/(exp(x1)+exp(x2)) 或者可以写成 f(x1,x2) = 1/(1+exp(x2-x1)).
你可以这么定义:
x = np.float32(np.repeat(0.5,2).reshape(2))
varX = tf.Variable(x, name='varX', dtype=tf.float32)
varX1 = tf.slice(varX,begin=[0],size=[1])
varX2 = tf.slice(varX,begin=[1],size=[1])
f = -1./(1+tf.exp(varX2-varX1))
opt = tf.train.GradientDescentOptimizer(your_learning_rate)
train = opt.minimize(f)
Question 1000814: 获取DataFrame所占空间的大小
统计/机器学习 Python有时候跑循环会跑着跑着MemoryError之类的错误,python有什么函数可以得到一个array或者DataFrame的大小?空间占了多少kb,多少mb?
Answer
我自己搞明白了
import sys
print(sys.getsizeof(df) / 1024.)
这个的结果就是df占了多少kb
试试
df.info()
最后一行会返回df的大小
或者试试
print(df.memory_usage().sum() / (1024 ** 2), "MB")
得到的是dataframe所占的空间有多少mb
Question 1000816: python直方图y轴显示占比,而不是绝对数值
统计/机器学习 数据可视化 Pythonpython里面(pyplot)怎么画直方图可以让y轴显示百分比,而不是绝对的数值统计?
我现在是直接用ply.hist,得到的是长下面这样的
我希望y轴显示的是百分比,比重之类。
谢谢!
Answer
import matplotlib
from numpy.random import randn
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
# 把y轴转化为百分比。
def to_percent(y, position):
return str(100 * y) + '%'
# 直方图的数据集
x = randn(500)
# 设置直方图分组数量bins=60.
plt.hist(x, bins=60, weights= [1./ len(x)] * len(x))
formatter = FuncFormatter(to_percent)
plt.gca().yaxis.set_major_formatter(formatter)
plt.show()
Question 1000820: 用python生成一个取值在a到b之间的随机矩阵
统计/机器学习 Python怎么用python生成一个m乘n的随机矩阵,每个元素取值都在a到b之间?
谢谢!
Answer
>>> import numpy as np
>>> a + (b - a) * np.random.rand(m, n)
Question 1000835: python numpy里array和matrix的区别?
统计/机器学习 Pythonpython numpy里array和matrix有什么区别,感觉matrix没什么用,一般都是用array
Answer
长话短说,是的,numpy里的matrix的确比较鸡肋。
一句话,尽量只用array,不用matrix。
理由主要是两个:一、matrix是array的子类,也就是说它们是非常相似的;matrix是限于2维,array则可以是2维,也可以是更高维。二、很多函数、或者其他库里的函数,返回的形式也常常是array而不是matrix。
Question 1000836: pandas DataFrame去掉重复的行
统计/机器学习 Python有没有什么好的方法可以去掉pandas DataFrame中重复的行?
Answer
df = df.drop_duplicates()
Question 1000842: XGBClassifier设置random_state报错
统计/机器学习 监督式学习 Python我想给XGBClassifier设置随机初始状态,reg = XGBRegressor(random_state=99)
结果报错
TypeError: __init__() got an unexpected keyword argument 'random_state'
我看了xgb的文档,明明是有random_state的
Answer
你试试reg = XGBRegressor(seed=99)
版本问题,老版本里只有seed,新版本里random_state和seed都有。但是本质上它们都是在设置随机种子。
Question 1000846: 将pandas.DataFrame中的-1全部换成0
统计/机器学习 Python除了循环之外有没有什么好方法可以达到快速替换的效果?
谢谢!
Answer
pandas自带的replace。(文档)
>> df.replace(to_replace=-1, value=0, inplace=True)
或者
>> new_df = df.replace(to_replace=-1, value=0)
Question 1000852: python里怎么把中文字符串转化为成list
统计/机器学习 自然语言处理 Pythonpython里怎么把中文字符串转化为成list?
比如我有string = '机器学习',我怎么可以得到
list_string = ['机', '器', '学', '习']?
Answer
我一般是先decode再encode
>>> string = '机器学习'
>>> list_string = map(lambda x: x.encode('utf-8'), string.decode('utf-8'))
>>> for i in list_string:
print i
机
器
学
习
python3还是很方便的
a = '吃火锅'
print(list(a))
['吃', '火', '锅']
Question 1000859: pandas里index的问题
统计/机器学习 Python假如我有一个dataframe,怎么获取某一列中取值为某个值的这行的index?
比如
col_1 col_2
0 1 2
1 3 1
我想获取col_1中等于3的行的index(这里是1)。
有什么方法吗?
谢谢!
Answer
>>> df[df['col_1'] == 3].index.tolist()
[1]
或者
>>> df[df['col_1'] == 3].index.tolist()[0]
1
Question 1000863: 去掉pandas DataFrame的index的名字
统计/机器学习 Python我的dataframe里index有名字,qid,怎么把这个去掉?
谢谢!
Answer
df.index.name = None
或者
del df.index.name
我记得设置的时候是index.col=字符串,换成none或者false试试
Question 1000866: 引用报错ImportError: No module named stats
统计/机器学习 Python我想用python里的stats包,总是报错,ImportError: No module named stats
有人用过这个吗?
Answer
stats是scipy的子模块,所以应该是
>>> from scipy import stats
Question 1000873: pandas怎么读入tsv格式的数据
统计/机器学习 数据预处理 Python I/O是用pd.read_table还是pd.read_csv?我试了两个,都出错了。
谢谢!
Answer
>>> import pandas as pd
>>> data = pd.read_csv('yourfile.tsv', sep='\t')
或者
>>> data = pd.read_table('yourfile.tsv', sep='\t')
想知道.tsv文件是一种什么文件格式?跟csv有什么差别?
Question 1000891: python如何读取元素中含有逗号的csv文件
统计/机器学习 Python I/Ocsv本来就是逗号隔开的,但是有的元素,比如‘2,000’这样的字符串,本身就有逗号在其中,这时候如果用pandas的read_csv()方程来读的话,就会报错。所以请问有没有别的办法能解决这个问题?
Answer
Python有一个叫csv的包,里面有一个reader() 函数可以处理这个问题。
假设我有这样一个csv文件,可以看到第一列第二行数据出了问题
如果用csv这个包的话,问题可以很容易得到解决
在读取出文件以后,楼主可以根据自己的实际情况将列表转换成需要的格式。
Question 1000912: 行数很多的pandas DataFrame如何在jupyter中完整显示?
统计/机器学习 Python我的dataframe有好几百行,在jupyter中print dataframe的时候,中间很多行都省略了(显示一坨省略号),有什么办法可以让它们完整显示出来吗?
Answer
这样DataFrame可以显示1000行
pd.set_option("display.max_rows", 1000)
如果要恢复默认设置
pd.reset_option("display.max_rows")
import pandas as pd
pd.options.display.max_rows = 300
显示所有行
pd.set_option('display.max_rows', None)
显示所有列
pd.set_option('display.max_columns', None)
这是一个非常危险的操作,一旦行列数过多,jupyter有非常大的可能会卡死
Question 1000927: 如何安装pytorch
统计/机器学习 深度学习 计算机视觉 Python 人工神经网络我用的电脑操作系统是macOS Sierra, python用的是Anaconda.
Answer
pytorch的官网(www.pytorch.org)上就有安装方法的介绍,如果用conda的话,在命令行(terminal)中输入下面这行代码就能实现安装。
conda install pytorch torchvision -c soumith
在terminal里用pip也可以
pip install http://download.pytorch.org/whl/torch-0.2.0.post3-cp27-none-macosx_10_7_x86_64.whl
pip install torchvision
Question 1000930: matplotlib如何设置画图格式,使得可视化效果更好
统计/机器学习 数据可视化 Python如题
Answer
萝卜青菜各有所爱吧,你要你的林志玲,他要他的许晴。
plt.style.use('ggplot')
plt.style.use('bmh')
plt.style.use('fivethirtyeight')
plt.style.use('seaborn-whitegrid')
plt.style.use('dark_background')
plt.style.use('grayscale')
品种众多,供君选择。
plt.style.use('ggplot')
用plt.style.use('ggplot')就可以设置画图的风格。其中‘ggplot'就是matplotlib提供的一种画图风格。
使用 print(plt.style.available) 就可以看到所以可以使用的画图风格。
总的来说,这些可设置的画图风格都比matplotlib默认的会显得更好看更专业一些。
下面两幅图分别是使用了ggplot的风格和matplotlib默认的风格的柱状图的对比。
Question 1000932: python的dataframe如何重新排列行或者列
统计/机器学习 Python比如说我有这样一个dataframe
我想调换这四列的顺序,这怎么样简单地做到呢。
Answer
可以使用dataframe的reindex方法。
使用reindex方法可以对行的顺序进行任意的调换,只需要把该方法的columns参数改成index。
注意reindex和df.index=['AU', 'UK', 'US', 'FR'] 的区别。后者是直接对该dataframe的列名进行修改,表格中的数据并不会随之变动。
Question 1000947: 当训练集只有一个特征的时候,sklearn的LinearRegression报错
统计/机器学习 回归分析 Python>>> reg = LinearRegression()
>>> reg.fit(train['x_1'], train['y'])
ValueError: Found input variables with inconsistent numbers of samples
报错内容是inconsistent numbers of samples,但是我检查过,都是482行。
有人知道这是个什么情况嘛?
Answer
我以前遇到过这个。是shape的问题,当输入一个只有一个特征的数据集的时候,sklearn会以为是一个有很多特征的单条数据。
reg.fit(train[['x_1']], train['y'])
或者
reg.fit(train['x_1'].reshape(-1, 1), train['y'])
应该就可以了。
Question 1000953: seaborn如何显示图?
统计/机器学习 数据可视化 Python我用seaborn画barplot,怎么让图片显示出来?
我试了sns.show(),结果报错了
AttributeError: 'module' object has no attribute 'show'
Answer
sns.plt.show()似乎不可以,也许是版本的问题。不过下面的code应该是可以的。
import seaborn as sns
import matplotlib.pyplot as plt
sns.barplot([1, 2, 3], [2, 3, 4])
plt.show()
我自己查到了
sns.plt.show()就可以了
Question 1000975: pandas读取csv中指定的某些列
统计/机器学习 Python I/O我有个很多很多列的csv文件,但是我只需要读取其中几列,比如id,age,gender,有什么方法吗?
Answer
设置参量usecols=['id', 'age', 'gender']
d = pd.read_csv('your_file_name.csv', usecols=['id', 'age', 'gender'])
同样适用于pd.read_table
d = pd.read_csv('your_file_name.csv')
d = d[['id', 'age', 'gender']]
Question 1000987: 用plt.hist画直方图,怎么返回每个bins的上下界和个数?
统计/机器学习 数据可视化 Python我用plt.hist画直方图,我设定了分组的个数是10,作图如下。
问题是我有什么办法可以得到每个bin的上下界和每个bin中元素的个数。
谢谢!
Answer
(counts, bins, patch) = plt.hist(data, bins=5)
counts 返回 每个bin里元素的数量
bins 返回 每个bin的分界线
patch不用管它
Question 1000994: pandas读取文件的前几行
统计/机器学习 Python I/O我只想读取少量的行数,看看数据和表格大概长什么样,pandas有什么方法可以做到吗?
谢谢!
Answer
设置nrows=10, 读取前10行
d = pd.read_csv('data.csv', nrows=10)
Question 1000999: python里有什么package和R里的ggplot类似?
统计/机器学习 开放问题 数据可视化 Pythonpython里有什么package可以画图好看点,最好最好和R里的ggplot类似?
Answer
ggplot2有python的移植:ggplot|home
import matplotlib.pyplot as plt
plt.style.use('ggplot')
这个能达到类似的效果
Question 1001002: sklearn的模型如何保存下来?
统计/机器学习 Python I/Osklearn训练好的模型,有什么方法可以以某种文件的形式保存下来?以后用的时候就不需要在train fit了,直接读取模型,然后predict。
Answer
#保存
from sklearn.externals import joblib
joblib.dump(model, 'path/to/my_model.pkl')
#读取
model = joblib.load('path/to/my_model.pkl')
也可以直接用pickle将模型保存到本地
import pickle
with open('filename.pkl', 'wb') as f:
pickle.dump(clf, f)
读取
with open('filename.pkl', 'rb') as f:
clf = pickle.load(f)
Question 1001006: 用python计算协方差
统计/机器学习 描述性统计 Python怎么用python计算协方差?
比如我有两个数列a, b,有没有现成的能计算cov(a, b)的?
Answer
import numpy as np
np.cov(a, b)
返回一个2 x 2的矩阵
左上角的数值是a的方差,右上角是a和b的协方差
左下角是b和a的协方差,右下角是b的方差
Question 1001016: xgboost的gblinear是什么意思?
统计/机器学习 回归分析 监督式学习 R Python当我们用xgboost做regression问题的时候,不管是R或者还是Python版本的xgboost,都有一个gblinear的booster。
这个gblinear是什么意思?
难道就是线性函数吗?线性函数有boosting一说?
Answer
因为对于线性回归来说,stack是没有意义的,这里的gblinear的意思实际上就是用sgd的迭代方法来训练一个LASSO线性模型。此时基于gblinear的xgboost就没有真正的‘boost’,只是一个用sgd求解的普通线性模型。
也可以参考xgb的作者陈天骐在这个问题里二楼的回应。
该回答是错误的。请看abuu同学的解答。
原帖内容:
—————————————————————————
boosting不是一种具体算法,而是一种通过加权来结合弱分类器,实现强分类的一种思想。xgboost是对其中boosting家族中gradient boosting算法的优秀实现。线性回归模型当然可以作为gradient boosting的一种弱分类器。
Question 1001023: python里Z-score和P-value相互转换
统计/机器学习 假设检验 概率分布 Pythonpython里有没有类似正态分布表的函数?
最好是能有从Z-score到P-value的函数,和P-value到Z-score的函数。
比如
z_to_p(1.96) = 0.05
p_to_z(0.05) = 1.96
Answer
stats里现成的从Z-score到概率分布的函数。
>>> import scipy.stats
>>> scipy.stats.norm.ppf(0.95)
1.6448536269514722
>>> scipy.stats.norm.cdf(1.64)
0.94949741652589625
至于转换成p-value就看你自己的假设检验是单侧的还是双侧的了。可以根据上面的代码,自己转换试试。
Question 1001024: 如何把一个pandas的dataframe的columns转换成list
统计/机器学习 Python如题
Answer
最简单的方法是list(df)
df.columns.tolist()
Question 1001025: 如何重命名pandas的dataframe的列名
统计/机器学习 Python如题
Answer
如果需要重命名所有的列,可以重新给df.columns 赋值。df.columns = ['new_col_1', 'new_col_1', ..., 'new_col_n'].
如果只需要改变某一列或几列的列名,则可以使用rename函数。df = df.rename(columns={'old_col_1': 'new_col_1'})。
以上两种方法也适用于index的修改,只需把columns改成index即可。
也可以参考这个。
Question 1001028: 用pandas处理一个很大的DataFrame时如何节省内存
统计/机器学习 开放问题 Python我电脑是8g的内存,在用pandas处理一个将近5g的csv文件时,虽然能够读取这个文件,但是在后续分析中很容易出现memory error。请问有什么简单的方法能够压缩这个表格,从而节省内存
Answer
1. 浮点数(float)降低精度或者转成整数(int)。
浮点数转整数这很好理解。
以numpy为例,浮点数有以下几种精度,float16, float32, float64, 并且默认的精度是float64。但是通常情况下float32,甚至float16的精度就已经足够了,所以可以用array的astype函数将float64转成float16或32.
2. 将字符串的类别变量转换成整数。
字符串占的内存比数字要大很多,所以要尽量用整数来替换字符串。比如我有一个叫“country“的列,它的值有'China', 'USA', 'Italy', 那么我可以用一个map把这三个值分别映射到1,2,3。这样也可以节省内存。
转换数据的类型,比如int64到int32甚至int8,float64到float32。例如:
>>> df.head()
a b c
0 0 -0.730132 0.193487
1 1 -0.050981 1.186009
2 2 0.392594 -0.690333
3 3 -1.351106 1.381132
4 4 0.361649 0.724137
>>> df.info()
RangeIndex: 100000 entries, 0 to 99999
Data columns (total 3 columns):
a 100000 non-null int64
b 100000 non-null float64
c 100000 non-null float64
dtypes: float64(2), int64(1)
memory usage: 2.3 MB
原始数据2.3MB
>>> df['a'] = df['a'].astype(np.int32)
>>> df.info()
RangeIndex: 100000 entries, 0 to 99999
Data columns (total 3 columns):
a 100000 non-null int32
b 100000 non-null float64
c 100000 non-null float64
dtypes: float64(2), int32(1)
memory usage: 1.9 MB
把a列从int64到int32,数据大小变为1.9MB
>>> df['b'] = df['b'].astype(np.float32)
>>> df['c'] = df['c'].astype(np.float32)
>>> data.info()
RangeIndex: 100000 entries, 0 to 99999
Data columns (total 3 columns):
a 100000 non-null int32
b 100000 non-null float32
c 100000 non-null float32
dtypes: float32(2), int32(1)
memory usage: 1.1 MB
把b,c列从float64到float32,数据大小变为1.1MB
Question 1001040: sklearn随机森林设置每棵树的权重
统计/机器学习 监督式学习 Python如果我用sklearn做随机森林,可以对森林中的每棵树设置不同的权重吗?
Answer
没这个功能吧,随机森林的性质本来就是每棵决策树等权重的。
如果权重不等,那就成boosting了。
随机森林是等权重的投票算法,所以题主需要的功能是无法达成的。
Question 1001042: 可视化sklearn决策树的结构
统计/机器学习 监督式学习 数据可视化 Python我用sklearn构造了决策树模型后,可以有办法得到这个决策树的结构?也就是if-else的判断的规则。
Thx!
Answer
用graphviz可以直接把树在jupyter notebook里显示出来
import graphviz
from sklearn import tree
model = tree.DecisionTreeRegressor(max_depth=2)
model.fit(X, y)
dot_data = tree.export_graphviz(model,
out_file=None,
feature_names=X.columns,
filled=True,
rounded=True,
special_characters=True)
graph = graphviz.Source(dot_data)
graph
需要通过调用tree.export_graphviz这个方法。
以sklearn自带的数据集iris为例
from sklearn.datasets import load_iris
from sklearn import tree
clf = tree.DecisionTreeClassifier()
iris = load_iris()
clf = clf.fit(iris.data, iris.target)
tree.export_graphviz(clf, out_file='trees.txt')
输出的trees.txt文件里有保存了你的决策树的判断规则。
如果你想把这个规则画出来的话,可以借用这个网站http://webgraphviz.com/,把上面的txt文件里的内容,复制过去就行了,可以得到类似下面的图。
Question 1001044: 把pandas df写入csv时UnicodeEncodeError
统计/机器学习 Python我有个数据集,我想把它以csv的形式存到本地。
dataset.to_csv('data_set.csv')
然后就报错了,如下。我怀疑是因为我数据集里有字符串编码的原因。
pandas/lib.pyx in pandas.lib.write_csv_rows (pandas/lib.c:19472)()
UnicodeEncodeError: 'ascii' codec can't encode character u'\u023c' in position 1: ordinal not in range(128)
有了解这类型错误的吗?
谢谢!
Answer
应该是字符encoding的问题
试试
dataset.to_csv('data_set.csv', encoding='utf-8)
Question 1001049: python里有现成的卡尔曼滤波器的包吗?
统计/机器学习 时间序列 开放问题 Python正在做一个和时间序列相关的项目,想试试卡尔曼滤波器(Kalman filter)。
python里有现成的卡尔曼滤波器的包吗?
谢谢!
Answer
Question 1001052: pandas把一列日期转换为星期
统计/机器学习 数据预处理 时间序列 PythonDataFrame有一列是日期,pandas里有什么函数可以得到那天是星期几的?
>>> data['date']
0 2017-10-01
1 2017-10-02
2 2017-10-03
Name: date, dtype: datetime64[ns]
比如2017-10-01是礼拜天
2017-10-01 -> 7
2017-10-02 -> 1
2017-10-03 -> 2
Answer
>> data['date'].dt.dayofweek
0 6
1 0
2 1
Name: date, dtype: int64
从0开始计数,0代表礼拜一,6是礼拜天。
直接用pandas内置的也可以
test['date'].dt.weekday
我一般用这个
data['date'].apply(lambda x: x.weekday())
Question 1001055: sklearn有没有生成混淆矩阵的函数?
统计/机器学习 模型验证 Python 损失函数sklearn中(或者说python中其他模块)有没有可以直接生成混淆矩阵的函数?
Answer
from sklearn.metrics import confusion_matrix
confusion_matrix(y_true, y_pred)
Question 1001058: 查看sklearn的线性回归系数的p value
统计/机器学习 假设检验 回归分析 Python不管是逻辑回归也好,线性回归也好,sklearn的线性模型只能查看每个变量的系数,有没有什么方法也可以像R里面那样查看系数的p value和显著性?
谢谢!
Answer
可以用statsmodel.api模块。比如说逻辑回归
>>> import statsmodels.api as sm
>>> log_reg = sm.Logit(df['y'], df[['a', 'b', 'c']])
>>> clf = log_reg.fit()
Optimization terminated successfully.
Current function value: 0.692762
Iterations 3
如果要查看系数的p value,调用clf.summary()就可以了,这个方法对OLS回归也是一样的。
>>> clf.summary()
Logit Regression Results
Dep. Variable: y No. Observations: 1000
Model: Logit Df Residuals: 997
Method: MLE Df Model: 2
Date: Tue, 17 Oct 2017 Pseudo R-squ.: -0.1341
Time: 10:19:37 Log-Likelihood: -692.76
converged: True LL-Null: -610.86
LLR p-value: 1.000
coef std err z P>|z| [95.0% Conf. Int.]
a 0.1240 0.219 0.565 0.572 -0.306 0.554
b -1.9466 6.245 -0.312 0.755 -14.186 10.293
c 3.7477 6.230 0.602 0.547 -8.463 15.958
sklearn不支持查看系数的p-value,可以参考statsmodels模块。
Question 1001063: python求logloss
统计/机器学习 监督式学习 Python 损失函数python里有现成可以求二元分类的logloss的函数吗?
谢谢!
Answer
from sklearn.metrics import log_loss
print log_loss(y_true, y_pred)
比如
log_loss([1, 0, 1, 1],[0.6, 0.2, 0.7, 0.4])
0.50173371272327194
Question 1001072: 对sklearn的决策树进行剪枝
统计/机器学习 监督式学习 Python请教各位,可以对sklearn的决策树模型进行剪枝吗?
Answer
目前还没有。
不过。
在山的那边,海的那边,有一群勤劳的程序员,他们正在讨论在新版本的sklearn里增加post-prune。
链接在此
sklearn目前没有具体实现剪枝的功能。
现在能做的是预剪枝,就是设置Classifier或者Regression里的参数max_depth, min_samples_split, min_samples_leaf。
后剪枝的确是在sklearn中做不到的。
----------补充-----------
当然有,这个是针对sklearn的决策树进行剪枝的完整代码和解析
Question 1001079: sklearn predict的默认阈值
统计/机器学习 监督式学习 Pythonsklearn里的predict_proba很好理解,是返回的概率。
predict是返回的分类的结果,我想知道的是默认阈值是多少?
比如说,概率大于x,返回1,概率小于x,返回0。这个阈值x在sklearn中是多少?
补充:如果是多元分类的话,那么阈值是多少?
Answer
对于二元分类,阈值是0.5
对于多元分类,predict是返回概率最大的那个标签
0.5
Question 1001091: python中实现柯尔莫可洛夫-斯米洛夫检验(K-S test)
统计/机器学习 假设检验 概率分布 Python我想用柯尔莫可洛夫-斯米洛夫检验(K-S test)来比较两个分布,python里该用什么包里的什么函数呢?
3Q3Q
Answer
可以用spicy.stats里的ks_2samp来实现两样本KS test。
#引用模块
from scipy.stats import ks_2samp
#产生两组不同的正态数据集
import numpy as np
x = np.random.normal(0, 1, 1000)
y = np.random.normal(0.1, 1, 1000)
#进行KS test
ks_2samp(x, y)
#返回值
#Ks_2sampResult(statistic=0.091000000000000025, pvalue=0.00046168121046219593)
Question 1001094: 二维numpy.array转为一维的numpy.array或者list
统计/机器学习 Python比如我有个numpy array如下:
>>> a
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
有什么办法可以可以把a转换为一维的array
array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
或者list的形式?
感谢各位!
Answer
numpy的array有flatten()方法
>>> a.flatten()
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
如果想要按列展开,可以设置参数为'F'
>>> a.flatten('F')
array([ 1, 4, 7, 10, 2, 5, 8, 11, 3, 6, 9, 12])
可以使用flatten与ravel两个函数,区别可以看看下面代码,根据你的需求进行选取
>>> x = np.array([[1, 2], [3, 4]])
>>> y = x.flatten()
>>> y
array([1, 2, 3, 4])
>>> y[0] = 9
>>> y
array([9, 2, 3, 4])
>>> x
array([[1, 2],
[3, 4]])
>>> z = x.ravel()
>>> z
array([1, 2, 3, 4])
>>> z[0] = 8
>>> z
array([8, 2, 3, 4])
>>> x
array([[8, 2],
[3, 4]])
a.reshape(1, -1)[0]
Question 1001105: python里怎么求多元分类的F1 score?
统计/机器学习 模型验证 Python大家好,python里怎么求多元分类的F1 score?
谢谢!
Answer
sklearn.metric.f1_score中有多种不同的多元分类的F1 score
from sklearn.metrics import f1_score
# micro
f1_score(y_true, y_pred, average='micro')
# macro
f1_score(y_true, y_pred, average='macro')
# weighted
f1_score(y_true, y_pred, average='weighted')
Question 1001110: sklearn SGDClassifier的partial_fit是什么意思?
统计/机器学习 监督式学习 PythonSGDClassifier里有个partial_fit的方法,这个和普通的fit方法有什么区别?
Answer
在第一次训练时,fit和partial_fit训练模型的原理其实本质上是一样的。
但是对于partial_fit的模型来说,当我们有了新数据,我们可以用新的数据在旧的模型基础上训练、更新模型,而不必重新训练。也就是另一位答友提到的,线上算法的特点。
以SGDClassifer为例,partial_fit的具体用法如下
from sklearn.linear_model import SGDClassifier
clf = SGDClassifier(loss='log')
#用数据集训练
clf.partial_fit(X, y)
#当我们有了新数据之后,可以在原基础上更新模型
clf.partial_fit(X_new, y_new)
#partial_fit的模型使用方法也是和正常模型一样的,直接用predict或者predict_proba
y_pred = clf.predict_proba(X_test)
fit就是一次性把模型训练完毕
partial_fit可以在原来的基础继续训练模型,所以partial_fit只针对对onlin的算法。这里SGD就是online的。
那除了sgd以外,还有什么可以使用`partial_fit`这个方法吗
Question 1001113: 把pandas.DataFrame中所有行全部随机排列
统计/机器学习 Python我有个DataFrame,有什么办法可以把其中的行打乱,随机重新排列的,谢谢!
Answer
pandas的dataframe有自带的sample功能,当设参数frac=1的时候,就相当于对行做shuffle
df = df.sample(frac=1)
如果重新排列之后希望index还是从0开始排序的话,可以这样操作
df = df.sample(frac=1).reset_indedx(drop=True)
用np.random.permutation构建一个随机序列,作为index来对df进行shuffle处理
from np.random import permutation
idx = permutation(len(df))
df[idx]
随机重排的属于叫做shuffle,也就是“洗牌”。
sklearn里有洗牌的函数。
from sklearn.utils import shuffle
df = shuffle(df)
Question 1001129: xgboost可以用sklearn里的GridSearchCV吗?
统计/机器学习 模型验证 Python如果想对xgboost调参,可以用sklearn里的GridSearchCV吗?
Answer
当然可以的。
from xgboost import XGBClassifier
from sklearn.model_selection import GridSearchCV
xgb_model = XGBClassifier(n_estimators=1)
parameters = {'learning_rate': [0.01, 0.02, 0.03], 'max_depth': [4, 5, 6]}
clf = GridSearchCV(xgb_model, parameters, scoring='roc_auc')
clf.fit(data, target)
上面这个例子就是对learning rate和max depth做grid search cv。
可以用GridSearchCV,前提是必须要用xgboost的sklearn api。
如果用xgb booster的话,就不能用了。
Question 1001130: python里有没有类似matlab里linspace的功能?
统计/机器学习 Pythonrange(k)只能生成整数,不能产生小数的等差数列。请问python里有没有类似matlab里linspace的功能,可以生成等差小数的数列?
Answer
numpy实现了很多类似matlab的功能,也包括linspace
import numpy as np
np.linspace(0, 2, 5)
可以得到 array([ 0. , 0.5, 1. , 1.5, 2. ])
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.linspace.html
Question 1001131: matplotlib.pyplot环境下给曲线下方的面积涂色?
统计/机器学习 数据可视化 Pythonmatplotlib.pyplot环境下如何给曲线下方的面积涂色?
比如下面的plot,怎么把曲线和x轴之间的面积填充颜色呢?
Answer
fill_between可以实现颜色填充。
给个栗子
x = np.linspace(0, 10, 100)
y = 10 * x - x ** 2
plt.plot(x, y)
plt.fill_between(x, y, interpolate=True, color='green', alpha=0.5)
plt.show()
Question 1001143: sklearn GridSearchCV中的refit是什么意思
统计/机器学习 模型验证 PythonGridSearchCV中有个参数refit,默认值是True
class sklearn.model_selection.GridSearchCV(estimator, param_grid, scoring=None, fit_params=None,
n_jobs=1, iid=True, refit=True, cv=None, verbose=0, pre_dispatch=‘2*n_jobs’,
error_score=’raise’, return_train_score=’warn’)
这个refit什么意思,怎么理解?
Answer
GridSearchCV是一个调参的过程,最后会告诉你最好的参数配置。
refit=True的意思就是GridSearchCV会按照最佳的参数配置重新训练模型。
clf = GridSearchCV(model, parameters, scoring='roc_auc', refit=True)
clf.predict(x_test)
在refit=True的时候,得到的clf是一个真正的模型,具有predict或者predict_proba的方法。
如果refit=False
clf = GridSearchCV(model, parameters, scoring='roc_auc', refit=False)
那么得到的clf并不是个真正的模型,不能进行predict。
Question 1001159: 根据经度、纬度,用python求两个地点的实际距离
统计/机器学习 描述性统计 Python 空间信息比如说我知道两个城市的经纬度
城市A,经度x_A,纬度y_A
城市B,经度x_B,纬度y_B
用python,怎么根据经纬度求出城市A和城市B的距离(公里数)?
谢谢!
Answer
你需要安装geopy这个包,然后就直接调用
北京上海为例
北京 纬度 39.9 经度 116.4
上海 纬度 31.2 经度 121.5
from geopy.distance import vincenty
beijing = [39.9, 116.4]
shanghai = [31.2, 121.5]
dist = vincenty(beijing, shanghai).km
print(dist)
得到结果1069.81945078
Question 1001162: python里怎么计算jaccard相似
统计/机器学习 推荐系统 描述性统计 Pythonpython里怎么计算jaccard相似
Answer
根据Jaccard的定义,用python很容易实现
def jaccard_sim(a, b):
unions = len(set(a).union(set(b)))
intersections = len(set(a).intersection(set(b)))
return 1. * intersections / union
使用
a = ['x', 'y']
b = ['x', 'z', 'v']
print(jaccard_sim(a, b))
得到0.25
Question 1001164: gensim训练出的Word2Vec模型每次都不一样
统计/机器学习 自然语言处理 Python 人工神经网络用gensim训练出来的word2vec模型,虽然设置了随机seed,但是每次得到的模型还是不一样。
有谁遇到过类似的问题吗?
代码如下
model1 = gensim.models.word2vec.Word2Vec(text, size=50, seed=1, window=3, workers=4)
model2 = gensim.models.word2vec.Word2Vec(text, size=50, seed=1, window=3, workers=4)
print model1.wv.most_similar(positive=['shanghai'])[:2]
print model2.wv.most_similar(positive=['shanghai'])[:2]
得到的结果是
[('beijing', 0.9490054249763489), ('seoul', 0.9238297343254089)]
[('beijing', 0.9414007663726807), ('taipei', 0.9180472493171692)]
Answer
这个我知道,的确有点小奇葩。。。
你需要确保workers=1,两个模型有一样seed的模型才会完全一样。不然的话,会因为并行计算的问题,两个就又乱了。
Question 1001175: 怎么对2维的numpy array取整?
统计/机器学习 Python我有一个2维的numpy array,里面数值有小数,我想对整个array取整
s = np.int(s)
用np.int之后直接就报错了
TypeError: only length-1 arrays can be converted to Python scalars
看来np.int只对1维array有效,那么2维的应该怎么取整?
Answer
取整的方法有很多,比如另外一个答案里的astype(int)。此外还有截取np.trunc,向上取整np.ceil,向下取整np.floor,四舍五入取整np.rint。
>>> x
array([[ 1. , 2.3],
[ 1.3, 2.9]])
>>> a = np.trunc(x)
>>> a
array([[ 1., 2.],
[ 1., 2.]])
>>> b = np.ceil(x)
>>> b
array([[ 1., 3.],
[ 2., 3.]])
>>> c = np.floor(x)
>>> c
array([[ 1., 2.],
[ 1., 2.]])
>>> d = np.rint(x)
>>> d
array([[ 1., 2.],
[ 1., 3.]])
s = s.astype(np.int)
Question 1001179: plt.scatter plot怎么让不同的类别有不同的颜色
统计/机器学习 数据可视化 Python如果我用python的pyplot画散点图,怎么可以让不同的类别显示不同的颜色,效果大致如下(网图)
谢谢!
Answer
可以用seaborn和matplotlib一起
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
N = 100
genders= ['Female', 'Male']
df = pd.DataFrame({
'Height': np.random.uniform(low=130, high=200, size=N),
'Weight': np.random.uniform(low=40, high=100, size=N),
'Gender': np.random.choice(genders, size=N)
})
fg = sns.FacetGrid(data=df, hue='Gender', hue_order=genders)
fg.map(plt.scatter, 'Weight', 'Height').add_legend()
plt.show()
import matplotlib.pyplot as plt
plt.style.use('ggplot')
import pandas as pd
import numpy as np
#随机生成两个dataframe
d1 = pd.DataFrame(columns=['x', 'y'])
d1['x'] = np.random.normal(0, 1, 100)
d1['y'] = np.random.normal(0, 1, 100)
d2 = pd.DataFrame(columns=['x', 'y'])
d2['x'] = np.random.normal(2, 1, 100)
d2['y'] = np.random.normal(2, 1, 100)
#分别画出scatter图,但是设置不同的颜色
plt.scatter(d1['x'], d1['y'], color='blue', label='d1 points')
plt.scatter(d2['x'], d2['y'], color='green', label='d2 points')
#设置图例
plt.legend(loc=(1, 0))
#显示图片
plt.show()
Question 1001191: 用python统计字符串中空格的个数
统计/机器学习 自然语言处理 Python比如我一个中文字符串
“余悲之 且曰 若毒之乎”
其中有两个空格,请问python中有什么方法可以得到一段字符串里空格的个数?
谢谢!
Answer
s = '余悲之 且曰 若毒之乎'
print s.count(' ')
my_str = '余悲之 且曰 若毒之乎'
[k for k in range(len(my_str)) if my_str.find(' ', k) == k]
得到[9, 16],这个是空格的位置
len([k for k in range(len(my_str)) if my_str.find(' ', k) == k])
上面的命令返回2,也就是空格的个数。
for 循环,==空格,自增1
Question 1001200: 请问Python有什么工具可以绘制K线图
统计/机器学习 时间序列 数据可视化 Python用了一下matplotlab 画了一下,但是全是绿色的...
代码:
data_list = []
for dates, row in baogang.iterrows():
# 将时间转换为数字
date_time = datetime.datetime.strptime(dates, '%Y-%m-%d')
t = date2num(date_time)
open, high, low, close = row[:4]
datas = (t, open, high, low, close)
data_list.append(datas)
print('t', t)
print('datas', data_list)
# 创建子图
fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2)
# 设置X轴刻度为日期时间
ax.xaxis_date()
plt.xticks(rotation=45)
plt.yticks()
plt.title("股票代码:601558两年K线图")
plt.xlabel("时间")
plt.ylabel("股价(元)")
#mpf.candlestick2_ochc(ax, data_list, width=0.6, colorup='r', colordown='g')
mpf.candlestick_ohlc(ax, data_list, width=4, colorup='r', colordown='g')
#mpf.candlestick2_ohlc(ax, opens, highs, lows, closes, width=4, colorup='k', colordown='r', alpha=0.75)
print('hello')
plt.grid()
plt.show()
Answer
感觉open,close,high,low的顺序不对。
正确的顺序应该是
matplotlib.finance.candlestick2_ochl(ax, opens, closes, highs, lows,
colorup='k', colordown='r')
所以你产生data_list的代码应该是
datas = (t, open, close, high, low)
data_list.append(datas)
Question 1001204: python sklearn模型中random_state参数的意义
统计/机器学习 Pythonpython机器学习模块sklearn里很多模型都有random_state这个参数,这个参数具体什么意思?有什么作用?
当我们调参的时候需要调这个random_state吗?
Answer
random_state就是随机seed,随机种子。因为sklearn中很多算法都含有随机的因素,为了进行可重复的训练,我需要固定一个random_state。
调参的时候是不需要调random_state,相反的是,我们应该先固定random_state,然后再对模型进行调参。
很多模型都需要一个随机的设定(比如迭代的初始值等等)。random_state的作用就是固定这个随机设定。
调参的时候,这个random_state通常是固定好不变的。
Question 1001211: pandas的DataFrame如何插入带有index的行数据?
统计/机器学习 Python原来的dataframe是这样
df=
country Rank
UK '英国' 5
AU '澳大利亚' 12
我想插入如下一行
CH '中国' 2
其中CH是这一行的index。最终得到的dataframe是
country Rank
UK '英国' 5
AU '澳大利亚' 12
CH '中国' 2
我怎么可以插入这样的行呢?谢谢!
Answer
df.loc['CH'] = ['中国', '2']
Question 1001217: sklearn朴素贝叶斯分类里GaussianNB和BernoulliNB的区别?
统计/机器学习 贝叶斯 监督式学习 Pythonsklearn提供了好几种朴素贝叶斯分类器,其中包括GaussianNB和BernoulliNB。
这两个有什么不同?有什么不同的使用场景?
Answer
这几个都是naive bayes的模型,区别主要在于特征的分布。
如果特征是数值的,最好是正态分布的数值的,那么用
sklearn.naive_bayes.GaussianNB
如果特征是binary的,那么用
sklearn.naive_bayes.BernoulliNB
如果特征是categorical的,那么用
sklearn.naive_bayes.MultinomialNB
看你的特征的条件概率符合哪种分布,正态分布还是二项分布。
Question 1001221: python里计算百分位数
统计/机器学习 描述性统计 Python给定一个array或者list,怎么计算百分位数?
谢谢!
Answer
如下可以得到data中25百分位数,50百分位数和75百分位数
import numpy as np
np.percentile(data, [25, 50, 75])
用scipy也可以
>> from scipy.stats import scoreatpercentile
>> scoreatpercentile(range(200), per=[90, 10])
[ 179.1 19.9]
参数per就是你想得到的百分位,返回的是对应的百分位数。
Question 1001225: sklearn计算MAPE
统计/机器学习 模型验证 Pythonsklearn里有没有直接计算MAPE(平均百分误差)的函数?
谢谢各位!
Answer
sklearn里应该没有MAPE。
我用numpy自己写一个给你,求点赞,谢谢!
import numpy as np
def MAPE(true, pred):
diff = np.abs(np.array(true) - np.array(pred))
return np.mean(diff / true)
Question 1001237: xgboost可以做回归预测吗?
统计/机器学习 回归分析 Pythonxgboost可以做回归预测吗?
Answer
当然可以啊,决策树能做回归
随机森林自然就可以做回归
然后,boosting也就可以做回归
那么,xgboost当然可以做回归
可以。不仅可以,而且效果也很牛
Question 1001242: 由均匀分布生成标准正态分布
统计/机器学习 概率论 概率分布 Python上周一道面试题,给你一个0到1的均匀分布,如何近似地生成一个均值为0,标准差为1的标准正态分布。并且用python实现。
也就是说你只能用numpy.random.uniform()这个函数,然后通过自己的一些算法,得到numpy.random.normal()。
已经挂了,但求思路!
Answer
这个面试的考点就是中心极限定理和均匀分布吧。一组随机变量的均值符合正态分布。
np.random.uniform()生成的是(0, 1)之间均匀分布的随机数, 2 * np.random.uniform() - 1生成的是(-1, 1)之间均匀分布的随机数。
一个常识是(a, b)的随机均匀分布变量的方差是(a - b)^2 / 12。含有n个样本的样本均值的方差是(a - b)^2 / 12 / n。
import numpy as np
normal_rv = 30 * np.mean(2 * np.random.uniform(size=300) - 1)
上面得到的normal_rv就是一个标准正态分布随机变量。
具体步骤是先产生300个(-1, 1)随机变量,它们的均值的标准差是1 / 30,要得到标准正态分布,所以最前面要乘以30.
让我来静静地装个X,题目要求是近似的正态,其实完全可以精确的正态。Box–Muller变换就能做到这一点。
假设$i.i.d.~X_1, X_2\sim U(0,1)$,也就是服从(0, 1)均匀分布,那么
$$Z=\sqrt{-2\text{ln}(X_1)}\cos(2\pi X_2)$$
就是服从$N(0,1)$标准正态分布的随机变量。上面那个式子就是Box-Muller变换。
iid = (np.mean(np.random.uniform(0,1,n))-0.5)*np.sqrt(12*n)
Question 1001248: python里怎么画QQ图?
统计/机器学习 假设检验 概率分布 数据可视化 Pythonpython里怎么画那种检验正态分布的QQ图?谢谢!
Answer
如果是要检验是否为标准正态分布
import statsmodels.api as sm
import pylab
sm.qqplot(data, line='45')
pylab.show()
如果是检验是否为正态分布(不一定是标准正态分布)
import statsmodels.api as sm
import pylab
sm.qqplot(data, line='s')
pylab.show()
画出来的图差不多是如下
Question 1001266: python里怎么实现柱状图?
统计/机器学习 数据可视化 Pythonpython里怎么实现柱状图?
比如我有个数据
年份 数量
2010 10
2011 15
2012 20
...
我希望得到的是一个柱状图,横轴是年份从2010开始,纵轴是数量。
谢谢!
Answer
用plt.bar就可以了
import matplotlib.pyplot as plt
plt.bar([2010, 2011, 2012], [10, 15, 20], align='center', alpha=0.5)
plt.show()
如果有兴趣,也可以读一下这个https://pythonspot.com/en/matplotlib-bar-chart/
Question 1001274: python去掉中文文本中所有的标点符号
统计/机器学习 自然语言处理 数据预处理 Python我有一段文本
“ 文本聚类:使用聚类方法,对词汇,片段,段落或文件进行分组和归类。”
去除标点符号之后的效果是
“ 文本聚类使用聚类方法对词汇片段段落或文件进行分组和归类”
用python如何实现这样的效果?谢谢
Answer
试试下面这个
import re
print(re.sub("[\s+\.\!\/_,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*():]+".decode("utf8"), "".decode("utf8"), s.decode("utf8")))
可以直接用正则表达式
import re
s = ' 文本聚类:使用聚类方法,对词汇,片段,段落或文件进行分组和归类。'
print(re.sub('\W', '', s))
可以用python的正则表达
Question 1001291: pytorch 的交叉熵损失总是报错,同样的结构改成MSELoss就没有问题
统计/机器学习 深度学习 Python 人工神经网络pytorch 的交叉熵损失总是报错,同样的结构改成MSELoss就没有问题,谁能告诉我怎么回事呀
loss_function = torch.nn.CrossEntropyLoss()
TypeError: FloatClassNLLCriterion_updateOutput received an invalid combination of arguments
这是报错截图
Answer
不知道你整个代码,但是也许是你的目标值的tensor type的问题吧
你试试把你的tensor转成longtensor的类型,比如
my_target = Variable(torch.LongTensor([1]))
Question 1001295: keras中怎么增加Leaky relu的激活层
统计/机器学习 Python 人工神经网络在keras中怎么增加一个Leaky relu激活函数的隐藏层?
Answer
比如这样
model = Sequential()
model.add(Dense(512, 512, activation='linear'))
model.add(LeakyReLU(alpha=.001))
from keras import layers
...
model.add(layers.LeakyReLU(alpha=0.1))
Question 1001297: python里用F检验来比较方差
统计/机器学习 假设检验 Pythonpython里怎么用F检验来比较两个样本的方差?
Answer
F test的原理非常简单,所以不妨自己写
先求出两个样本的方差的比值,再写出两个样本的自由度,然后就去查F分布的概率累计函数,就可以得到p value了。
from scipy.stats import f
F = np.var(a) / np.var(b)
df1 = len(a) - 1
df2 = len(b) - 1
p_value = 1 - 2 * abs(0.5 - f.cdf(F, df1, df2))
Question 1001305: pandas DataFrame中去掉缺失值多于50%的列
统计/机器学习 数据预处理 PythonAnswer
我写了个函数
def drop_col(df, col_name, cutoff=0.5):
n = len(df)
cnt = df[col_name].count()
if (float(cnt) / n) < cutoff:
df.drop(col_name, axis=1, inplace=1)
用的时候,比如说你有一个pandas的dataframe叫df,其中有一列是'col_1',如果这一列中有50%以上的缺失值,那么就从df中删除这一列
drop_col(df, 'col_1', cutoff=0.5)
如果这一列中有80%以上的缺失值,那么就从df中删除这一列
drop_col(df, 'col_1', cutoff=0.2)
Question 1001306: xgboost中的参数min_child_weight是什么意思?
统计/机器学习 监督式学习 Pythonxgboost中的参数min_child_weight是什么意思?
Answer
它是指生成一个子节点所需要的最少样本权重。
如果新生成的子节点上的样本权重小于你指定的数,那么这个子节点就不会生长出来。
如果每个样本的权重都是相等的(=1),那么min_child_weight其实就相当于random forest或者decision tree里的min_samples_leaf,也就是产生一个新的子节点所需要的样本数量。
min_child_weight可以看作是一种样本数量的加权和。
Question 1001313: sklearn里怎么做多项式回归?
统计/机器学习 回归分析 Pythonsklearn里怎么做多项式回归?搜了一下,感觉里面没有现成的多项式回归。
Answer
可以参考numpy.polyfit
下面就是个用polyfit做三次多项式回归的例子
>>> x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])
>>> y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0])
>>> coef = np.polyfit(x, y, 3)
>>> coef
array([ 0.08703704, -0.81349206, 1.69312169, -0.03968254])
coef是回归系数,按照幂次先高后低排列。
sklearn里没有多项式回归,只能靠自己造轮子了。你需要人工生成那些高次项,比如说你要做一个像
$$Y= a_0 + a_1x + a_2x^2 + a_3x^3$$
的三次多项式回归。那么你就需要人工制造出$x^2$和$x^3$这两个特征,然后再做sklearn里的回归。
可以参考如下
from sklearn.linear_model import LinearRegression
X_new = pd.DataFrame()
X_new['x'] = x
X_new['x2'] = X_new['x'] ** 2
X_new['x2'] = X_new['x'] ** 3
reg = LinearRegression()
reg.fit(X_new, y)
这个问题不是编程的问题,而是统计学中的本质问题,在统计理论中,对非线性回归模型,比如多项式、logsitic回归、对数回归等等,都可以转化为线性回归模型来求解的
所以,这个不是现有程序的问题,而是基本思想的问题
Question 1001323: 怎么用numpy生成一个三维的tensor?
统计/机器学习 Pythonnumpy array可以生成一个矩阵,那么怎么用numpy生成一个三维的tensor?
Answer
numpy.array可以用来构造任意维度的tensor,而不是局限于矩阵,完全取决于你用了多少括号
>> import numpy as np
>> m = np.array([[[1, 2, 3], [1, 2, 3]], [[1, 2, 5], [1, 2, 5]]])
>> m.shape
(2, 2, 3)
>> m
array([[[1, 2, 3],
[1, 2, 3]],
[[1, 2, 5],
[1, 2, 5]]])
Question 1001326: pd.dataframe怎么同时对两个key排序?
统计/机器学习 Python比如说我的df里有很多列,其中两列'a'和'b',我希望能够按照这两列的大小进行从小到大排序,就说先按照'a'的大小,如果有并且再按照'b','b'较小的排在前面。
这波操作应该怎么做?
谢谢各位了!
Answer
df.sort_values(by=['a' ,'b'], ascending=True, inplace=True)
Question 1001330: sklearn模块有神经网络的类可以调用吗?
统计/机器学习 Python 人工神经网络sklearn模块有神经网络的类可以调用吗?想要试一试
Answer
sklearn里神经网络的方法较少,目前是多层感知机MLP模型,可以参考http://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier
Question 1001337: 用matplotlib.pyplot作图时,调整标题中文字的大小
统计/机器学习 数据可视化 Python大家好,如果用用matplotlib.pyplot作图,怎么可以调整标题中文字的大小。
我的图和代码如下:
import matplotlib.pyplot as plt
plt.plot(x, y)
plt.title('My plot')
plt.show()
想请教如何调整标题My plot的字体大小?
谢谢!
Answer
在title里设置fontsize参数
plt.plot(x, y)
plt.title('my plot', fontsize=30)
plt.show()
同样fontsize也可以设置在legend,xlabel, ylabel里。
Question 1001342: 怎么添加pandas的dataframe到已有的csv文件,并且不覆盖原内容
统计/机器学习 Python现在有一个csv文件,里面是有数据的,我怎么把同样格式的pandas dataframe存到已有的csv文件,并且不覆盖原内容
Answer
df.to_csv('your_file.csv', mode='a', header=False)
a是append的意思,就是追加在原文件的后面
Question 1001348: 可视化K Means的时候怎么把聚类的中心点和样本点连起来?
统计/机器学习 无监督学习 数据可视化 PythonK Means每个聚类都有个中心点,有没有什么方法可以把中心点和归属它的样本点连起来?
我在网站上看到的示意图如下
请问python里可以实现吗?我试了matplotlib.pyplot的scatter散点图,但是它不能画连线,只能标出散点。
谢谢!
Answer
其实也不一定非要用plt.scatter。
不知道你的数据格式是怎么样的,所以我就用numpy.array做个例子
下面是我自己用plt.plot写了一段
import matplotlib.pyplot as plt; plt.style.use('ggplot')
a = np.random.normal(4, 1, 10)
b = np.random.normal(4, 1, 10)
center = [4, 4]
for point in zip(a, b):
plt.plot([center[0], point[0]], [center[1], point[1]], marker='o', markersize=15, color='g', alpha=0.4)
plt.show()
效果如下
a = np.random.normal(0, 1, 10)
b = np.random.normal(0, 1, 10)
center = [0, 0]
for point in zip(a, b):
plt.plot([center[0], point[0]], [center[1], point[1]], marker='o', markersize=15, color='g', alpha=0.4)
a = np.random.normal(4, 1, 10)
b = np.random.normal(4, 1, 10)
center = [4, 4]
for point in zip(a, b):
plt.plot([center[0], point[0]], [center[1], point[1]], marker='o', markersize=15, color='r', alpha=0.4)
plt.show()
效果如下
希望对你有帮助!
Question 1001353: sklearn实现adaboost算法了吗?
统计/机器学习 监督式学习 Pythonsklearn实现adaboost算法了吗?如果有的话,如何调用呢?
谢谢!
Answer
当然有的!sklearn.ensemble.AdaBoostClassifier
参考链接:sklearn文档
调用方法
from sklearn.ensemble import AdaBoostClassifier
clf = AdaBoostClassifier()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
Question 1001371: pandas df.head()报错AttributeError: 'NoneType' object has no attribute 'head'
统计/机器学习 Python我先删掉'SPID'这一列,然后通过.head()显示一下数据框的前几列
df = df.drop('SPID', axis=1, inplace=True)
df.head()
但是报错了,报错信息如下
AttributeError: 'NoneType' object has no attribute 'head'
网上没查到原因,有谁知道这个bug是什么情况的吗?
Answer
是drop里的inplace的方式用错了,要么
df.drop('SPID', axis=1, inplace=True)
或者
df = df.drop('SPID', axis=1)
Question 1001374: pymongo多线程报错Address already in use
统计/机器学习 Python我用cygwin跑的Python,开了1000个线程读取mongodb的数据,前面好好的,后面就开始报错了,这个问题挺久了,试了网上的方法好像都无效
File "/usr/lib/python2.7/site-packages/pymongo/collection.py", line 2524, in remove
with self._socket_for_writes() as sock_info:
File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__
return self.gen.next()
File "/usr/lib/python2.7/site-packages/pymongo/mongo_client.py", line 825, in _get_socket
with server.get_socket(self.__all_credentials) as sock_info:
File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__
return self.gen.next()
File "/usr/lib/python2.7/site-packages/pymongo/server.py", line 168, in get_socket
with self.pool.get_socket(all_credentials, checkout) as sock_info:
File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__
return self.gen.next()
File "/usr/lib/python2.7/site-packages/pymongo/pool.py", line 790, in get_socket
sock_info = self._get_socket_no_auth()
File "/usr/lib/python2.7/site-packages/pymongo/pool.py", line 826, in _get_socket_no_auth
sock_info, from_pool = self.connect(), False
File "/usr/lib/python2.7/site-packages/pymongo/pool.py", line 763, in connect
_raise_connection_failure(self.address, error)
File "/usr/lib/python2.7/site-packages/pymongo/pool.py", line 211, in _raise_connection_failure
raise AutoReconnect(msg)
AutoReconnect: 127.0.0.1:27017: [Errno 112] Address already in use
Answer
估计是port被占用了,不知道是不是前面的进程出了问题,试试把threads数量调小点,然后读个小数据试试。
Question 1001377: python里有没有huber loss的线性回归
统计/机器学习 回归分析 Python 损失函数python里有没有huber loss的线性回归的package?
Answer
sklearn里有sklearn.linear_model.HuberRegressor,想法和sklearn.linear_model.LinearRegression一样的。
至于huberloss的定义,可以查看huber loss是什么?什么时候用?
Question 1001380: python里求累计和
统计/机器学习 Python比如我一个array或者list,= [2, 1, -1, 3, 5],怎么求它的累加和?
上面那个list的累加和是[2, 3, 2, 5, 10]。
谢谢各位大佬!
Answer
补充一个来自python自带的模块itertools的accumulate函数,与numpy的cumsum不同的是它会默认返回一个迭代器。而且当传入一个函数时,可以支持求和以外的其它操作:
from itertools import accumulate
>>> list(accumulate([4,2,3]))
[4, 6, 9]
>>> list(accumulate([4,2,3], max))
[4, 4, 4]
numpy里有cumsum,就是累加和的意思
>>> import numpy as np
>>> np.cumsum([1, 2, 1])
array([1, 3, 4])
Question 1001384: sklearn classification_report里的support是什么意思
统计/机器学习 监督式学习 模型验证 Python下面这个sklearn官方的例子
>>> from sklearn.metrics import classification_report
>>> y_true = [0, 1, 2, 2, 2]
>>> y_pred = [0, 0, 2, 2, 1]
>>> target_names = ['class 0', 'class 1', 'class 2']
>>> print(classification_report(y_true, y_pred, target_names=target_names))
precision recall f1-score support
class 0 0.50 1.00 0.67 1
class 1 0.00 0.00 0.00 1
class 2 1.00 0.67 0.80 3
avg / total 0.70 0.60 0.61 5
report里最后一列是support。这个support是什么意思?
Answer
sklearn官方文档的解释是“The support is the number of occurrences of each class in y_true.”
class I的suppport是k,意思就是说该测试集中有k个样本的真实分类为class i.
所以你上面的表格里class 0 support = 1就是说,测试集里有1个样本的真实标签是class 0.
class 1 support = 1就是说,测试集里有1个样本的真实标签是class 1.
class 2 support = 3就是说,测试集里有3个样本的真实标签是class 2.
Question 1001393: 用python求二元分类的混淆矩阵
统计/机器学习 监督式学习 模型验证 Python各位大佬好,请问怎么用python求二元分类的混淆矩阵?
谢谢!
Answer
sklearn里可以直接计算混淆矩阵sklearn.metrics.confusion_matrix
from sklearn.metrics import confusion_matrix
confusion_matrix(y_true, y_pred)
也可以通过confusion_matrix函数直接得到TN, FP, FN, TP
tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
confusion matrix本质上就是列联表,pandas里的crosstab可以得到列联表。参考下面的代码
>> results = pd.DataFrame()
>> results['True'] = [1, 1, 1, 1, 1, 0, 0, 0]
>> results['Pred'] = [1, 1, 0, 0, 1, 1, 0, 0]
# 用pd.crosstab可以得到confusion matrix
>> pd.crosstab(results['True'], results['Pred'])
Pred 0 1
True
0 2 1
1 2 3
Question 1001395: matpltlib怎么给直方图加上拟合曲线?
统计/机器学习 数据可视化 Python上面的直方图里有一条红色的拟合的曲线。matpltlib怎么给直方图加上拟合曲线?
谢谢!
Answer
需要用到python的matplotlib包,如下:
# -*- coding:utf-8 -*-
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
mu = 100 # 正态分布的均值
sigma = 15 # 标准差
x = mu + sigma * np.random.randn(10000)#在均值周围产生符合正态分布的x值
num_bins = 50
n, bins, patches = plt.hist(x, num_bins, normed=1, facecolor='green', alpha=0.5)
#直方图函数,x为x轴的值,normed=1表示为概率密度,即和为一,绿色方块,色深参数0.5.返回n个概率,直方块左边线的x值,及各个方块对象
y = mlab.normpdf(bins, mu, sigma)#画一条逼近的曲线
plt.plot(bins, y, 'r--')
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title(r'Histogram of IQ: $\mu=100$, $\sigma=15$')#中文标题 u'xxx'
plt.subplots_adjust(left=0.15)#左边距
plt.show()
得到图形为:
用sns.displot是最简单,最方便的
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
sns.distplot(np.random.normal(0, 1, 1000), bins=30)
plt.show()
Question 1001407: python中有哪些关于隐马尔可夫模型(HMM)的package?
统计/机器学习 时间序列 开放问题 Pythonpython中有哪些关于隐马尔可夫模型(HMM)的package?
避免自己重复造轮子(其实想造也造不出),问问有没有现成的。
Answer
前几天在折腾贝叶斯网络的时候刚好发现一个包pomegranate(http://pomegranate.readthedocs.io/en/latest/HiddenMarkovModel.html#hiddenmarkovmodel),好像支持隐马尔可夫模型的拟合还有预测的样子,楼主看看是不是你想要的。
Question 1001410: plt.plot作图,隐藏坐标轴
统计/机器学习 数据可视化 Python用plt.plot作图怎么可以让坐标轴隐藏,或者去掉不显示?
plt.plot(a, b)
plt.show()
比如上面这个图是有坐标轴的,我是想去掉坐标轴
Answer
off一下就关掉了
plt.plot(a, b)
plt.axis('off')
plt.show()
Question 1001422: 怎么把collections.Counter的计数结果转为pandas的DataFrame
统计/机器学习 数据预处理 Python我有一个list,我用collections.Counter对它进行计数统计,有没有办法把这个计数结果(应该是个dict)转换为pandas的DataFrame的形式?
from collections import Counter
cnts = Counter(a)
# 下面想把cnts转成dataframe,第一列是key,第二列是计数
谢谢!
Answer
df = DataFrame(cnts.items(), columns=['key', 'cnt'])
df = pd.DataFrame.from_dict(cnts, orient='index').reset_index()
df.columns = ['key', 'cnts']
Question 1001435: 如何利用python画分类器的ROC曲线?
统计/机器学习 监督式学习 模型验证 Python已经预测值和真实标签,如何利用python画分类器的ROC曲线?
Answer
y_true = [0, 0, 0, 1, 1, 1, 1, 1]
y_pred = [0.1, 0.3, 0.6, 0.2, 0.4, 0.8, 0.5, 0.9]
fpr, tpr, _ = sklearn.metrics.roc_curve(y_true, y_pred)
plt.figure(figsize=(6, 6))
plt.axis([0, 1, 0, 1])
plt.plot(fpr, tpr)
plt.show()
Question 1001437: python对给定的集合进行有放回抽样?
统计/机器学习 抽样方法 Python比如我有一个list,怎么对这个list进行有放回的随机抽样?
谢谢!
Answer
numpy.random.choice
import numpy as np
>> a = [1, 3, 5]
>> np.random.choice(a, size=10, replace=True)
array([3, 3, 5, 5, 5, 1, 3, 3, 1, 5])
>>> from random import choices
>>> colors = ["R", "G", "B"]
>>> choices(colors, k=4)
['G', 'R', 'G', 'B']
Question 1001441: 怎么print或者查看tf.tensor中的数值
统计/机器学习 Python TensorFlow怎么print或者查看tf.tensor中的数值?
如果直接用print,并不能得到tensor里元素的数值
>> a = tf.random_normal([2, 3])
>> print(a)
Tensor("random_normal_9:0", shape=(2, 3), dtype=float32)
有什么方法可以print或者直接查看tf.Tensor中的数值的吗?
Answer
要在with tf.Session()里才能查看tensor里的数值
a = tf.random_normal([2, 3])
with tf.Session():
print(a.eval())
Question 1001449: pandas DataFrame中经常出现SettingWithCopyWarning
统计/机器学习 Python对DataFrame中一些行或者列重新赋值的时候,经常出现
SettingWithCopyWarning
请问大家一般都是怎么处理的?
Answer
如果你对原先的dataframe先进行slicing或者indexing,然后赋值,都会出现SettingWithCopyWarning。
情形一
d[d['col_1'] == 0]['col_2'] = 1
会出现警告
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
解决方法,
使用loc或者iloc
d.loc[d['col_1'] == 0, 'col_2'] = 1
情形二
先从原dataframe取出一个子dataframe,然后再对其中的元素赋值,例如
s = d[d['col_1'] == 0]
s.loc[:, 'col_2'] = 1
就会出现
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
解决方法,
对子datafame先进行copy,然后再赋值
s = d[d['col_1'] == 0].copy()
s.loc[:, 'col_2'] = 1
尝试用iloc或者loc来索引,比如
# 替换'norm'列
df.loc[:,'norm'] = np.random.randn(10)
# 替换第十列
df.iloc[:,10] = np.random.randn(10)
Question 1001452: 怎么用matplotlib.pyplot画出堆积柱状图?
统计/机器学习 数据可视化 Python在matplotlib.pyplot里,bar可以画出柱状图,如果是要画出如下这种效果的堆积式的柱状图,该用什么函数实现?谢谢各位!
Answer
设置plt.bar里的bottom参数,可以达到堆积叠加效果
x = [1, 2, 3]
y1 = np.array([2, 3, 2])
y2 = np.array([3, 1, 5])
y3 = np.array([1, 2, 1])
plt.bar(x, y1, color='green', label='y1')
plt.bar(x, y2, bottom=y1, color='red', label='y2')
plt.bar(x, y3, bottom=y1+y2, color='blue', label='y3')
plt.legend(loc=[1, 0])
plt.show()
Question 1001465: numpy.array转换为图片并显示出来
统计/机器学习 计算机视觉 数据可视化 Python 数据竞赛Answer
# ipython@python3环境
import pandas as pd
import numpy as np
with open('~/train.csv') as f:
data = pd.read_csv(f)
X = data.drop(['y','id'], axis=1)
X = np.array(X)
# 每一行代表一张图片,选取第一行。
pic1 = X[1]
# 图片分辨率是40*40
pic1 = pic1.reshape((40, 40))
# 绘图
%matplotlib inline
from matplotlib import pyplot as plt
# 传入cmap='gray'指定图片为黑白
plt.imshow(pic1, cmap='gray')
另外补充一下,如果是彩色图片,在reshape的时候需要设置成三维,分别代表每个像素点RGB三种配色的取值:
pic1.reshape((height, width, 3))
import matplotlib.pyplot as plt
plt.imshow(my_figure, cmap=plt.cm.binary)
plt.show()
Question 1001472: python做图自定义背景色
统计/机器学习 数据可视化 Python用python的matplotlib做图,怎么把背景色改成自定义的背景色?类似下图这样
Answer
# 设置背景色为粉色
plt.rcParams['axes.facecolor'] = 'pink'
# 作图
plt.plot([0, 2], [2, 3])
# 显示
plt.show()
Question 1001487: sklearn.preprocessing.StandardScaler采用的是哪种标准化的方法?
统计/机器学习 数据预处理 PythonAnswer
在默认的情况下 StandardScaler就是减去均值,然后除以标准差
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
相当于$$\frac{原始数值-均值}{标准差}$$
当然在StandardScaler中也可以设置参数with_mean和with_std
from sklearn.preprocessing import StandardScaler
sc = StandardScaler(with_mean=False)
等价于$$\frac{原始数值}{标准差}$$
类似地
from sklearn.preprocessing import StandardScaler
sc = StandardScaler(with_std=False)
等价于$${原始数值-均值}$$
Question 1001496: tensorflow里出现的strides是什么意思
统计/机器学习 Python 人工神经网络 TensorFlowtensorflow里经常出现strides这个参量(比如tf.nn.max_pool和tf.nn.conv2d),这个参量是什么意思?如何理解?
Answer
一般理解为步长、跨度或者步幅。稍微具体一点说就是window或者filter每次跨越的距离。
这个其实算是cnn里的基础概念,可以先试着理解一点背景,然后再去理解tensorflow或者其他package是如何使用这些网络的。
Question 1001526: Pandas怎样对dataframe中的一个时间列进行排序?
统计/机器学习 时间序列 Python比如我的dataframe里有一列time
'2017-01-21 18:00:00', '2017-01-21 09:00:00','2017-01-21 15:00:00', '2017-01-21 12:00:00', '2017-01-21 13:00:00', '2017-01-21 14:00:00'
怎么让我的dataframe按照time时间先后顺序排列?
Answer
先把它转为时间对象
df['time'] = pd.to_datetime(df['time'])
然后再对time这列排序
df.sort_values('time', inplace=True)
Question 1001529: python中实现k-modes的包
统计/机器学习 无监督学习 Pythonsklearn里好像没有实现k modes,请问有其他package里有k modes算法吗?谢谢!
Answer
请参考这个https://github.com/nicodv/kmodes
安装完之后,用法如下
import numpy as np
from kmodes.kmodes import KModes
# random categorical data
data = np.random.choice(20, (100, 10))
km = KModes(n_clusters=4, init='Huang', n_init=5, verbose=1)
clusters = km.fit_predict(data)
# Print the cluster centroids
print(km.cluster_centroids_)
Question 1001535: python里画出“热图”
统计/机器学习 数据可视化 Pythonpython里怎么画“热图”?
像下面这样的
图是网上的,请无视坐标轴,我就是想实现热图的效果
Answer
用seaborn里的heatmap可以画出热图
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
生成一个随机矩阵a,并画出热图
a = np.random.uniform(0, 1, size=(10, 10))
sns.heatmap(a, cmap='Reds')
plt.show()
也可以用不同的颜色
a = np.random.uniform(0, 1, size=(10, 10))
sns.heatmap(a, cmap='GnBu')
plt.show()
使用seaborn 中的heatmap来画,
seaborn是画图的库,比matplotlib.pyplot高级,易用一些。
import matplotlib.pyplot as plt
import numpy as np
a = np.random.random((16, 16))
plt.imshow(a, cmap='hot', interpolation='nearest')
plt.show()
效果如下
Question 1001554: 如何复制一个pandas DataFrame
统计/机器学习 PythonPandas中很多操作都是“传址”的,也就是说
# 比如有一个dataframe df1
# 把df1赋值到df2
df2 = df1
# 对df2中的一些元素进行操作
# 发现df1也跟着变了
怎么复制一个dataframe的数值,对新的df进行修改,不会影响到原来dataframe。
谢谢!
Answer
这个很简单啊
df2 = df1.copy()
Question 1001557: 提取sklearn逻辑回归的模型系数
统计/机器学习 回归分析 监督式学习 Python比如我用sklearn.linear_model.SGDClassifier做了一个逻辑回归,怎么能够提取出这个逻辑回归中各个特征的回归系数?以及截距?
谢谢!
Answer
from sklearn.linear_model import SGDClassifier
clf = SGDClassifier()
clf.fit(X, y)
#得到回归系数
coefs = clf.coef_
#得到截距
intercept = clf.intercept_
Question 1001559: from __future__ import division是什么意思
统计/机器学习 Pythonpython代码头部经常出现的
from __future__ import division
是什么意思?
Answer
python里的除号/是默认是整除
>>> 3 / 2
1
加上了上面那一段,除号/就变成了正常的小数除法了
>>> from __future__ import division
>>> 3 / 2
1.5
python3里不需要了,因为除法自然就是得到小数的
这段代码的意思就是在使用Python2的时候把高版本的Python3的特性引进当前版本中。
Question 1001561: DataFrame批量修改列名
统计/机器学习 Python最近在用python学习做统计 想将基础的统计方法集成到一个软件中 比如将GLM,多因素方差分析放到一个软件里 这
样下次使用的话直接用就可以了 不必再重新去写 但是我在做多因素方差分析的时候发现了很大的问题 就是怎么将一个csv文件的每一列都单独加一个列名 有么有大神会 求指教
谢谢
Answer
不大明白你的意思和销魂的换行,哈哈哈
你是批量修改一个csv文件中所有的列名吗?
-----更新-----
比如你有3个DataFrame,你要批量修改列名,比如第k个DataFrame的列都有后缀_k。
dfs = {0: df0, 1: df1, 2: df2}
for i in range(3):
cols = list(dfs[i].columns)
dfs[i].columns = map(lambda x: str(x) + '_%s'%i, cols)
Question 1001565: 多因素方差分析
统计/机器学习 假设检验 PythonAnswer
emmmm 用pandas读取csv 之后用columns属性 得到包含所有列名的列表 就可以了吧
方差检验,当然还是上spss,利器
Question 1001568: numpy中获得tensor的维数?
统计/机器学习 Pythonnumpy.array就可以看作是tensor。我想知道怎么获得一个array的维数。比如对于向量,维数是1;对于矩阵,维数是2。
补充一下,我知道my_array.shape。但这个返回的是行数、列数,并不是我说的维数。
Answer
my_array.ndim
可以返回一个array的dimension的个数
len(my_array.shape)
Question 1001571: 如何用python实现贝叶斯网络优化lightgbm超参数?
统计/机器学习 贝叶斯 监督式学习 Python如何用python实现贝叶斯网络优化lightgbm超参数?
Answer
def krrcv(
alpha,
degree,
coef0,
):
params['alpha'] = max(alpha, 0)
params['degree'] = max(degree, 0)
params['alpha'] = max(alpha, 0)
data=train_df
target=y_train_df
val=cross_val_score(KernelRidge(params),data,target,scoring='r2',cv=5).mean()
return val
krrBO=BayesianOptimization(krrcv,{
'alpha':(0,1),
'degree':(0,4),
'coef0':(0,5)
})
这是我目前用贝叶斯网络优化 KRR的参数,但是总是出错,比如
TypeError: ufunc 'add' output (typecode 'O') could not be coerced to provided ou
tput parameter (typecode 'd') according to the casting rule ''same_kind''
网上参考的代码太少了,希望能够得到帮助!
Question 1001583: python两个日期,求间隔的天数
统计/机器学习 时间序列 Python有两个时间变量(就是日期),在python中怎么求两者间隔的天数?
Answer
>>> from datetime import date
>>> delta = date.today() - date(2017,1,1)
>>> delta.days
387
>>> import pandas as pd
>>> t1 = pd.to_datetime('2017-10-01')
>>> t2 = pd.to_datetime('2018-02-01')
>>> (t2 - t1).days
123
Question 1001587: python或者numpy求数值的中位数、四分位数
统计/机器学习 描述性统计 Python怎么用python或者numpy求数值的中位数、四分位数?
Answer
# 引用numpy模块
import numpy as np
#求数组a的中位数
np.median(a)
#求数组a的四分位数
np.percentile(a, [25, 50, 75])
Question 1001592: matplotlib.pyplot中怎么把legend放到图片外面去?
统计/机器学习 数据可视化 Python比如下面的图,legend(图例)在图片里面,对图像有遮挡。
怎么设置可以把图例放在图片的外面?
Answer
试试
plt.legend( bbox_to_anchor=(1,1), loc='center left')
我都是用
plt.legend(loc=[1, 0])
Question 1001600: python里怎么求一个矩阵的秩?
统计/机器学习 线性代数 Pythonpython里怎么求一个矩阵或者numpy.array的秩?
Answer
numpy.linalg.matrix_rank(M)可以用求秩
>>> import numpy as np
>>> A = np.array([[1, 1], [2, 2]])
>>> A
array([[1, 1],
[2, 2]])
>>> np.linalg.matrix_rank(A)
1
Question 1001607: keras.models.Sequential()是一种什么模型
统计/机器学习 深度学习 Python 人工神经网络from keras import models
from keras import layers
model = models.Sequential()
用keras的时候一上来都先定一个models.Sequential()。这里的models.Sequential()是什么意思?
Answer
sequential model就是那种最简单的结构的模型。按顺序一层一层训练,一层一层往前的那种。没有什么环的结构。比如像前馈网络那样。
就像下图这样的,一层层的那种。
keras中定义模型的方法之一,一层层线性叠加的网络架构。另一种方法是通过函数式API可以构建任意形式的架构
Question 1001611: sklearn里有没有可以求kappa值的?
统计/机器学习 描述性统计 Pythonsklearn里有没有可以求kappa值的?
Answer
Question 1001619: MSE问题
统计/机器学习 模型验证 Python 损失函数有没有人能告诉下MSE在PYTHON中怎么实现吗 最好有代码 小白一只
Answer
这个挺简单的。
import numpy as np
def mse(y_real, y_pred):
return np.mean((y_real - y_pred) ** 2)
Question 1001637: numpy.array从行向量转为列向量
统计/机器学习 线性代数 Python我有一个numpy.array形式的行向量,比如说
array([1, 2, 3])
怎么能把它转为列向量?
array([[1],
[2],
[3]])
Answer
>>> a = np.array([1, 2, 3])
>>> a = a.reshape(-1, 1)
>>> a
array([[1],
[2],
[3]])
row_vec = np.array([1, 2, 3])
col_vec = np.array([row_vec]).T
注意row_vec外面的方括号,必须要有
Question 1001642: matplotlib怎样让grid网格线处于图像下层?
统计/机器学习 数据可视化 Python上面这个图网格线在bar的上面了,怎么让这个网格线沉到底层去?
谢谢!
Answer
试试
plt.rc('axes', axisbelow=True)
Question 1001657: python里如何实现线性判别分析(LDA)?
统计/机器学习 监督式学习 Python请问python里如何实现线性判别分析(LDA)?
Answer
Question 1001659: sklearn里的LabelEncoder什么用?
统计/机器学习 监督式学习 Pythonsklearn里的LabelEncoder什么用?很多代码里都有这个。
但是没搞清楚什么作用。已经是label了,为什么还要再encoder?
Answer
label encoder就是把lable编码的。比如label是一串地名,是无法直接输入到sklearn的分类模型里作为训练标签的,所以需要先把地名转成数字。然后LabelEncoder就是帮你做这件事的。
>>> from sklearn import preprocessing
>>> le = preprocessing.LabelEncoder()
>>> le.fit(["paris", "paris", "tokyo", "amsterdam"]);
>>> le.transform(["tokyo", "tokyo", "paris", "amsterdam", "amsterdam"])
array([2, 2, 1, 0, 0])
把一些没什么上下文联系的文本转换成能作为input的数字,不然都没把文本输入到模型里去
再做特征工程时,我们需要处理已有特征,对于分类特征通常有两种处理方案:
- 自然数编码
使用sklearn中的LabelEncoder方法,转换为数值型特征
- 独热编码(one-hot encoding)
生成一个(n_examples * n_classes)大小的0~1矩阵,每个样本仅对应一个label
可以使用pandas中的get_dummies实现
Question 1001667: 怎么在matplotlib.pyplot的plot上加上文字?
统计/机器学习 数据可视化 Python我不是指加标题或者坐标轴或者图例,我是指在plot上加文字说明,类似于下面这个例子。
这个该如何实现?谢谢!
Answer
用plt.text(x, y, your_text),x是文字起始点的横坐标,y是文字的纵坐标。
import matplotlib.pyplot as plt
plt.plot([0, 2], [0, 2])
plt.text(0.5, 1, 'put some text')
plt.show()
Question 1001671: plt.scatter画二元分类散点图,怎么用加号表示阳性、减号表示阴性
统计/机器学习 监督式学习 数据可视化 Python我的数据降过维之后是二维的,所以可以在平面上表示。
下一步我是想用plt.scatter画二元分类散点图。
用加号+表示阳性样本、减号-表示阴性样本。
请问,怎么实现这个效果?
谢谢!
Answer
设置plt.scatter里的marker属性
>>> import matplotlib.pyplot as plt
>>> plt.style.use('ggplot')
>>> plt.scatter([0, 2, 4], [0, 1, 2], s=80, lw=2, marker='+', color='red', label='Positive')
>>> plt.scatter([1, 3, 5], [2, 1, 0], s=80, lw=2, marker='_', color='green', label='Negative')
>>> plt.legend(loc=(1, 0.8))
>>> plt.show()
Question 1001678: sklearn里计算roc_auc_score,报错ValueError: bad input shape
统计/机器学习 监督式学习 模型验证 Python用sklearn的DecisionTreeClassifer训练模型,然后用roc_auc_score计算模型的auc。代码如下
clf = DecisionTreeClassifier(criterion='gini', max_depth=6, min_samples_split=10, min_samples_leaf=2)
clf.fit(X_train, y_train)
y_pred = clf.predict_proba(X_test)
roc_auc = roc_auc_score(y_test, y_pred)
报错信息如下
/Users/wgg/anaconda/lib/python2.7/site-packages/sklearn/metrics/ranking.pyc in _binary_clf_curve(y_true, y_score, pos_label, sample_weight)
297 check_consistent_length(y_true, y_score)
298 y_true = column_or_1d(y_true)
--> 299 y_score = column_or_1d(y_score)
300 assert_all_finite(y_true)
301 assert_all_finite(y_score)
/Users/wgg/anaconda/lib/python2.7/site-packages/sklearn/utils/validation.pyc in column_or_1d(y, warn)
560 return np.ravel(y)
561
--> 562 raise ValueError("bad input shape {0}".format(shape))
563
564
ValueError: bad input shape (900, 2)
这个是怎么回事?有人遇到过吗?
Answer
目测是你的y_pred出了问题,你的y_pred是(900, 2)的array,也就是有两列。
因为predict_proba返回的是两列。predict_proba的用法参考这里。
简而言之,你上面的代码改成这样就可以了。
y_pred = clf.predict_proba(X_test)[:, 1]
roc_auc = roc_auc_score(y_test, y_pred)
Question 1001686: pandas里怎么求移动平均数?
统计/机器学习 描述性统计 Pythonpandas里怎么求一个dataframe里一列的移动平均数?
谢谢!
Answer
这个问题出现过一次。看这里。
Question 1001694: python pandas里有没有类似R的summary的函数?
统计/机器学习 R Pythonpython pandas里有没有类似R的summary的函数?
可以看到一个dataframe的基本信息,所有列名什么的
Answer
比如一个pd.DataFrame,变量名为df,可以用df.info()和df.describe()
df.info()返回这个dataframe的基本信息,比如以iris数据集为例,150行,5列,每列的列名等等。
>>> df.info()
df.describe()可以返回每一列更具体的信息,比如均值、方差、四分位等等。
>>> df.describe()
>>> df.describe()
可以用head来查看一个dataframe的前几行,你就知道基本信息了
>>> df.head()
Question 1001704: pandas pop KeyError求帮助!
统计/机器学习 PythonLAS = LogisticRegression(penalty='l1', C=1.0, random_state=0)
y_train = train.pop("class_id")
"
明明很简单呀 为什么会出错呢
Answer
mantora您好,感谢您的提问!为了方便其他朋友更好地理解您的问题,您的标题已经被修改。
--------我试着回答您的问题--------
针对于您的问题,建议你检查class_id两端是否有空格。有时候空格会造成不匹配。
其次一个方法,我注意到class_id是您的第二列,所以可以试试
print(train.columns[1])
y_train = train.pop(train.columns[1])
你pop之前有这个column吗?因为pop之后,这个column就被删除了,所以你不能反复调用pop这个语句的。
Question 1001712: 如何用python画饼图?
统计/机器学习 数据可视化 Python如何用python画饼图?最好能是下面这个效果。
谢谢!
Answer
万能的matplotlib里有pie函数,可以直接画饼图。
labels = ['Cookies', 'Jellybean', 'Milkshake', 'Cheesecake']
sizes = [38.4, 40.6, 20.7, 10.3]
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.legend(loc=[0.9, 0.6])
plt.axis('equal')
plt.show()
如果数据是pandas的类型,那么画饼图更容易
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('ggplot')
df = pd.DataFrame({'Country': ['china', 'india', 'usa'], 'Population': [14, 13, 3]})
df.Population.groupby(df.Country).sum().plot(kind='pie')
plt.axis('equal')
plt.legend()
plt.show()
Question 1001723: 怎么把sklearn里的iris dataset转为pandas.Dataframe的形式?
统计/机器学习 Python我load sklearn里自带的iris数据集,可是读完后它是numpy array的形式,也没有列名什么的,怎么把它转成有列名的pandas.DataFrame的形式?
谢谢各位!
Answer
方法一:
from sklearn.datasets import load_iris
import pandas as pd
import numpy as np
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
方法二:
iris数据在UCI网站上也有,可以从网站上导入
import pandas
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'class']
dataset = pandas.read_csv(url, names=names) #读取csv数据
如果你需要把y列也放进dataframe里的话
from sklearn import datasets
import pandas as pd
import numpy as np
iris = datasets.load_iris()
col_names = iris['feature_names'] + ['target']
data = pd.DataFrame(data= np.c_[iris['data'], iris['target']], columns=col_names)
Question 1001782: Jupiter notebook中显示一个dataframe所有的列
统计/机器学习 Python我有一个pandas dataframe,有很多列,在jupyter notebook里没有完整显示,都被省略号代替了。
有什么办法可以完整显示所有列的?
谢谢!
Answer
设置最多可显示的列数。下面的代码设置最多显示100列。
pd.options.display.max_columns = 100
也可以取消限制,比如设置为None。
pd.options.display.max_columns = None
转置之后呢
Question 1001850: plt.pie画饼图,怎么调节透明度alpha
统计/机器学习 数据可视化 Pythonmatplotlib里一般都是用alpha调节图像透明度的。
但是plt.pie(x, alpha=0.5),设置alpha透明度都会报错。
TypeError: pie() got an unexpected keyword argument 'alpha'
有什么好方法可以设置透明度的吗?
谢谢!
Answer
Question 1001857: 求推荐条件随机场(CRF)的python package
统计/机器学习 自然语言处理 开放问题 Python请求大家推荐推荐关于条件随机场(CRF)的python的包。
最好是稳定的,并且是被持续维护的。谢谢!
Answer
试试pystruct
Question 1001875: python中可以做beta regression的包?
统计/机器学习 回归分析 监督式学习 Python需要做一个beta regression,sklearn里没有,statsmodel里也没有找到
问问各位有没有用python做过beta regression的?
Answer
Question 1001899: sklearn.metrics.auc里提到的梯形法则是什么意思?
统计/机器学习 模型验证 Pythonsklearn.metrics.auc的官方文档里提到了一个梯形法则,原文如下:
“Compute Area Under the Curve (AUC) using the trapezoidal rule”
请问这个梯形法则是什么意思?用在什么地方?
谢谢!
Answer
所谓曲线(curve)实际上就是一堆散点,散点下方的面积和就是AUC。
梯形法则,就是说把一个个小面积看作梯形,然后auc就是这些梯形的面积和。
此外还有矩形法则,auc就是矩阵面积的和。
当然,我们肉眼也能判断,梯形法则得到的面积更精确一些。
Question 1001921: sklearn算法里输入的数据集是要求pandas.DataFrame还是numpy.array呢
统计/机器学习 Pythonsklearn算法里输入的数据集的格式是要求pandas.DataFrame还是numpy.array呢?
还是都可以?
Answer
两者都可以。
但要注意,输入sklearn 的必须是数值型数据
一般来说把df格式的转换成矩阵储存形式比较好,这样就能和np的计算函数一起用了,同时的np的array形式可以赋值到dataframe
Question 1001997: xgboost的FIT问题
统计/机器学习 监督式学习 Python不是很懂这个ERROR什么意思请大神解答一下
TypeError: fit() got an unexpected keyword argument
Answer
你的fit里的那个categorical_feature是不应该有的,因为fit()里就没有这个参数。
官方的文档里只有下面几个参数
fit(X, y, sample_weight=None, eval_set=None, eval_metric=None,
early_stopping_rounds=None, verbose=True, xgb_model=None)
建议你把categorical_feature这个去掉再试试。
Question 1002022: 怎么在keras中加载MNSIT数据集?
统计/机器学习 Python 人工神经网络keras新人求助。
怎么在keras中加载MNIST手写数字的数据集?
谢谢!
Answer
>>> from keras.datasets import mnist
>>> (train_images, train_labels), (test_images, test_labels) = mnist.load_data()
Question 1002039: 生成两组不独立的标准正态分布随机数
统计/机器学习 概率分布 Python怎么用python生成两组不独立(相关系数不为0)的标准正态分布的随机数呢?
Answer
我自己想明白了,应该是直接用多元正态分布比较好
Question 1002046: sklearn kmeans里的n_init是什么意思
统计/机器学习 无监督学习 Python官方文档里对n_init的描述是
Number of time the k-means algorithm will be run with different centroid seeds. The final results will be the best output of n_init consecutive runs in terms of inertia.
设置选择质心种子的次数,默认为10次。返回质心最好的一次结果。
这个是什么意思?
Answer
n_init就是初始化的次数。
为什么要多次初始化呢?
因为k means无法达到全局最优,每次收敛到最后的结果是局部最优,所以就需要跑很多次独立初始化的k means,比如说n_init=10就是跑10次。然后从这10次里面选最优的那个。
不同初始化只取决于不同的初始点,也就是初始质心。
k means无法保证收敛到最优解,所以要反复进行,选择当中最优的。
n_init就是重复进行k means的次数。
Question 1002067: matplotlib怎么把图例放到图外面
统计/机器学习 数据可视化 Python比如我用plt.plot画了下面的图,然后legend会挡住部分图像。
怎么把图例放到图像框的外面?
Answer
legend里有一个参数是bbox_to_anchor,接受tuple给的坐标,可以指定任意位置
我都是用
plt.legend(loc=[1, 0])
Question 1002105: python中计算KL divergence
统计/机器学习 概率分布 描述性统计 Pythonpython中计算KL divergence有什么直接调用的函数吗?
如果没有的话,那就自己手写咯
Answer
scipy里的entropy实际上就可以计算Kullback–Leibler divergence
>>> from scipy.stats import entropy
>>> entropy(p, q)
@sasa 写了二项分布的情况,其实KL还可以做两个高斯分布的情况
假设两个高斯分布$p:N(\mu_1, \sigma_1^2)$,$q:N(\mu_2,\sigma_2^2)$,这两个高斯分布的KL divergence就等于
$$\text{KL}(p,q)=\log\frac{\sigma_2}{\sigma_1}+\frac{\sigma_1^2+(\mu_1-\mu_2)^2}{2\sigma_2^2}-\frac{1}{2}$$
上面的式子用python很好写的
Question 1002123: Jupyter中InteractiveShell.ast_node_interactivity = "all"有什么用?
统计/机器学习 Python我看一些网上的jupyter notebook代码里都有下面这段
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
不是很清楚这个有什么用。
我把这个删掉,也完全没有什么影响。
有了解这段代码的吗?
Answer
完全不影响结果,最多影响显示和输出。
用过jupyter notebook的都知道,每个cell只会显示最后一个输出结果,除非用print。例如
x = 3
x
x ** 2
Jupiter notebook中会显示
9
3不会被显示出来。题主问的这段代码
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
的作用就是让全部结果都显示出来。设置完之后,最上面那段代码的结果就是
3
9
Question 1002149: 对pandas.DataFrame进行groupby结果中index的问题
统计/机器学习 数据预处理 Python比如我有一个数据集
train.head()
然后我对is_workday和weather进行groupby查看y的均值
train.groupby(['is_workday', 'weather'])['y'].mean()
得到的结果如上。它不是一个传统的dataframe,它的index是两层的,一层是is_workday,第二层是weather。怎么让结果就变成index依然从0开始的数字,然后is_workday和weather只是其中的列而已。
谢谢!
Answer
设置as_index=False就可以了
train.groupby(['is_workday', 'weather'], as_index=False)['y'].mean()
效果如下
.reset_index()可以不
Question 1002151: mac电脑怎么用ssh远程控制Linux服务器查看可视化结果
统计/机器学习 深度学习 Python 人工神经网络求助各位大神,我用的是mac本,在用linux服务器跑深度学习的程序,但是不知道怎么看跑出来的学习曲线和各种的图片结果,求助啊!感谢!我只有远程服务器的IP,端口,用户名和密码。
Answer
那个远程的程序是你自己写的不?如果是的话就方便多啦
我一般都是在程序先写好了代码,自动把图片、数据都存放在服务器的临时文件夹里。跑完之后,把文件(图片、数据)scp回自己的笔记本。用完了之后再把服务器里临时存放的给删掉。
Question 1002162: 请教一下:关于融合stack
统计/机器学习 回归分析 监督式学习 Python 数据竞赛回归,其实也就是第一个小竞赛。
我直接用单模型跑的,在5kfold,rmse的均值是14.4多。
因为数据过于干净,我试过对分类的数量少的合并,还有对室外和体感做斜率,包括把时间分为工作时间和下班时间,做特征,效果都贼j8差,不如三下五除二的直接fit。排名中等。
于是我就想可能特征已是极限,需要上stack了。
于是我拿rflrgbdtlassolgb等做了一个七列的预测矩阵,把预测矩阵放在xgb下重新训练,
在5折上均值14.9多,也就是这个class瞎忙活了,
真心求教一下,是不是思路错了???
Answer
室外和体感做斜率是什么意思?
Question 1002163: 远程用linux 跑程序,训练完train的部分后,画图出现问题
统计/机器学习 深度学习 数据可视化 Python 人工神经网络求助!
Answer
这种错误
RuntimeError: Invalid DISPLAY variable
可以在import的时候试试下面的代码,加上agg
import matplotlib.pyplot as plt
plt.switch_backend('agg')
Question 1002175: python使用MFCC特征训练GMMHMM模型
统计/机器学习 监督式学习 无监督学习 特征选择 Python如题,我现在有很多段音频,每个音频的每一帧单独标记了它是伴奏还是浊音和清音,我现在知道每一帧音频的MFCC39维特征,三种状态的初始概率,三种状态转移矩阵,我想通过这三个条件来训练GMMHMM模型,我尝试用sklearn.mixture来分别训练三种状态的MFCC序列,得出三个GMM模型,但是效果一直不理想,我不知道我的方法是否错误,希望各位能指导我一下GMM在音频训练时的过程,另外我尝试用hmmlearn来直接建模时不知道如何下手
Answer
你的目的是?判断下一帧是三种类型的哪一种吗?
为什么只用初始概率和状态转移矩阵呢?我觉得音频本身的信息更重要啊
把它们的信息结合在一起然后搞个时间序列模型应该是不错的选择
Question 1002178: 如何在numpy array尾部增加一行
统计/机器学习 Python比如我有个3x3的numpy ndarray,我有一个list [1, 2, 3],怎么把这个list插入到array中作为最后一行?
Answer
用np.vstack就可以了
np.vstack([a, new_row])
例如
>>> a
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> new_row = [1, 5, 9]
>>> b = np.vstack([a, new_row])
>>> b
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[1, 5, 9]])
>>> import numpy as np
>>> a=np.array([[1,2],[3,4]])
>>> b=np.array([[5,6],[7,8]])
>>> c=np.concatenate((a,b),axis=0)
>>> c
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
>>> c=np.concatenate((a,b),axis=1)
>>> c
array([[1, 2, 5, 6],
[3, 4, 7, 8]])
>>>
Question 1002201: 图像分割的深度学习训练,把数据库格式从jpg改成png之后报错如图,求解。
统计/机器学习 数据预处理 Python 人工神经网络list index out of range, 只是改变了数据库的图片格式,其他没有变。
Answer
肯定是id超过了train_output_names这个list的长度了吧,你可以用try debug,比如
try:
output_image = load_image(train_output_names[id])
except:
print('error id: %s'%id)
然后你再看看自己哪里写错了
Question 1002215: 怎么把pyspark RDD dataframe转为pandas.DataFrame?
统计/机器学习 Python怎么把pyspark RDD dataframe转为pandas.DataFrame?
Answer
df = my_spark_df.toPandas()
Question 1002221: tf.placeholder(tf.float32, shape=(None, 1024))中的None是什么意思
统计/机器学习 Python 人工神经网络 TensorFlow在设置placeholder时,shape里的None是什么意思?有什么用?
tf.placeholder(tf.float32, shape=(None, 1024))
有时候,还有这种情况
tf.placeholder(tf.float32, shape=[None, img_height, img_width, channels])
shape里的None有什么用?
谢谢!
Answer
第一个例子中
tf.placeholder(tf.float32, shape=(None, 1024))
1024是指的数据的尺寸,None指的batch size的大小,所以可以是任何数。
第二个例子里
tf.placeholder(tf.float32, shape=[None, img_height, img_width, channels])
类似地,后面几个是图片尺寸的参数,第一个参数为None,表示batch size的大小。
Question 1002236: python随机打乱文本
统计/机器学习 深度学习 自然语言处理 数据预处理 Python最近在做深度学习 决定拿cnn做做 但是 照网上很多例子来做 有一个疑问 解决不了 就是 一个txt文件里面的行 怎么去打乱
Answer
举个例子,假如我有一个文件a.txt,然后按行来读取。
# 读取a.txt
>>> with open('a.txt') as f:
content = f.readlines()
>>> content
['Today is good.\n', 'Tomorrow is good.\n', 'Yesterday was bad.\n', 'See you.']
>>>
# 打乱content中的顺序
>>> import random
>>> random.shuffle(content)
>>> content
['Yesterday was bad.\n', 'See you.', 'Today is good.\n', 'Tomorrow is good.\n']
你意思是划分数据集?sklearn中有
from sklearn.model_selection import train_test_split
可以随机划分数据集。
如果不是划分数据集。那么可以使用random随机函数,就可以打乱行数了。多使用python
Question 1002281: matplotlib画三维散点图?
统计/机器学习 数据可视化 Python比如我有x,y,z三个维度,怎么用matplotlib画一个三维的散点图?
Answer
# -*- coding: utf-8 -*-
from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
data = np.random.randint(0, 255, size=[40, 40, 40])
x, y, z = data[0], data[1], data[2]
ax = plt.subplot(111, projection='3d') # 创建一个三维的绘图工程
# 将数据点分成三部分画,在颜色上有区分度
ax.scatter(x[:10], y[:10], z[:10], c='y') # 绘制数据点
ax.scatter(x[10:20], y[10:20], z[10:20], c='r')
ax.scatter(x[30:40], y[30:40], z[30:40], c='g')
ax.set_zlabel('Z') # 坐标轴
ax.set_ylabel('Y')
ax.set_xlabel('X')
plt.show()
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 生成数据
data = np.random.randint(0,255,size=[40,40,40])
x,y,z= data[0],data[1],data[2]
# 创建三维对象
fig= plt.figure()
ax = Axes3D(fig)
# 绘制散点图
ax.scatter(x[:10],y[:10],z[:10],c='y')
ax.scatter(x[10:20],y[10:20],z[10:20],c='r')
ax.scatter(x[30:40],y[30:40],z[30:40],c='g')
# 显示图像
plt.show()
Question 1002299: 返回pyspark dataframe的行数?
统计/机器学习 Python怎么返回pyspark sql dataframe的行数?
在pandas里就直接
len(df)
但是对于pyspark的dataframe,len是无效的。
Answer
df.count()
Question 1002302: 求python里得到n-grams的包?
统计/机器学习 自然语言处理 数据预处理 Python求一个python里得到n-grams的包
功能是对于给出的一段话,得到所有的n-gram
谢谢指教!
Answer
nltk我不知道有没有这个轮子,不过这个就是拿来做文本
自己去看下官方文档,说不定就有
sklearn里也有的
from sklearn.feature_extraction.text import CountVectorizer
text = "this is a foo bar sentences and i want to ngramize it"
vectorizer = CountVectorizer(ngram_range=(1,6))
analyzer = vectorizer.build_analyzer()
print(analyzer(text))
仅供参考
Question 1002308: 得到一个pyspark.sql.dataframe中所有列的名称
统计/机器学习 Python如何得到一个pyspark.sql.dataframe中所有的列名呢?
谢谢这个社区,帮助小弱解决了好几个问题
Answer
有两种方法
spark_df.schema.names
或者
spark_df.columns
df.printSchema()
Question 1002319: 关于sklearn.model_selection.PredefinedSplit的用法
统计/机器学习 监督式学习 模型验证 Pythonsklearn.model_selection.PredefinedSplit的用法没有搞明白,官方文档没有看得很懂,有谁可以解释下吗?
谢谢!
Answer
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
test_fold = [0, 1, -1, 1]
test_fold 长度和训练集相同。
-1所在的index只放在train_set里。
其他的数字,每一轮选一个数字,该数字所在的所有index作为test_set。
比如说第一轮,数字0所在的位置作为test_set,即X[0];
第二轮,数字1所在的位置作为test_set,即X[1],X[3]。
Question 1002326: python里实现词云的package
统计/机器学习 自然语言处理 Python求大伙推荐一个python里实现词云的package?
谢谢各位!
Answer
wordclound
Question 1002330: 系数非负的线性回归的python实现
统计/机器学习 回归分析 Python我现在需要做一个线性回归,但是考虑到实际意义,要求所有的回归系数都是非负的。回归是采用最小二乘的方法。
请问这类回归在python中有什么实现的方法吗?
多谢多谢!
Answer
这个叫非负最小二乘回归。sklearn.linear_model.Lasso里可以设置positive=True来使得系数都为正。如果你不需要正则化的话就把alpha设成0或者很小的数。
from sklearn.linear_model import Lasso
model = Lasso(alpha=0.00001, positive=True)
model.fit(X,y)
这是带不等式条件的二次规划(Quadratic Programming)
$argmin_{w}{|Xw-y|^2} s.t. w>0$,
可以用http://cvxopt.org/examples/tutorial/qp.html
https://scaron.info/blog/quadratic-programming-in-python.html
Question 1002339: 删除numpy.array的最后一列
统计/机器学习 Python怎么删除numpy.array的最后一列?
pandas里直接drop就可以了,numpy array没有drop这个函数。
Answer
选择第一列到倒数第二列就可以了
a = a[:, :-1]
删除最后一列
my_array = np.delete(my_array, -1, axis=1)
删除第一列
my_array = np.delete(my_array, 0, axis=1)
Question 1002349: wordcloud安装报错error: Microsoft Visual C++ 14.0 is required
统计/机器学习 自然语言处理 Python我用的是windows 10系统,通过pip install wordcloud安装,结果报错
error: Microsoft Visual C++ 14.0 is required.
Get it with "Microsoft Visual C++ Build Tools"
估计是因为需要Visual C++,想问问有没有不安装Visual C++的解决方案?
Answer
我在github上找到一个解决方案,步骤如下
1. 先去这里找到你对应的版本的whl文件,比如你是python3.6,64位windows,那么就下载wordcloud‑1.4.1‑cp36‑cp36m‑win_amd64.whl
2. 到你这个下载文件所在的文件夹里面,在你的command prompt里面输入
python -m pip install wordcloud‑1.4.1‑cp36‑cp36m‑win_amd64.whl
然后就应该安装完毕了
Question 1002358: 如何用python统计一个txt文本的行数
统计/机器学习 自然语言处理 Python文本处理接触得不多,请问如何用python统计一个txt文本的行数?
Answer
使用open来读文件,然后统计多少行。
def lineNumber(filename) :
with open(filename) as lines :
return len(lines.readlines())
readlines
或者dataframe
sum(1 for line in open(`filename`).readlines())
印象中在stack overflow上见过同样的问题
Question 1002362: numpy里的np.clip函数怎么用?
统计/机器学习 Pythonnumpy里的np.clip函数有什么作用?怎么用?
Answer
请看官方文档
作用:
把一个array限制在一定范围内
例如,a被限制在了3到8的范围内:
>>> a =[2, 3, 1, 4, 10, 9]
>>> np.clip(a, 3, 8)
array([3, 3, 3, 4, 8, 8])
np.clip对高维的numpy.ndarray也是有效的。
Question 1002372: 求一个nxn的numpy array的对角线的和?
统计/机器学习 Python怎么求一个nxn的numpy array的对角线的和?
我想到的就是跑循环,有直接求对角线和的函数么
sum = 0
for i in len(array):
sum = sum + array[i, i]
Answer
对角线上元素的和就是线性代数里的迹(trace),numpy里有trace这个函数
np.trace(array)
Question 1002378: sklearn.linear_model.SGDClassifier能做小批量学习(mini-batch)吗?
统计/机器学习 监督式学习 Pythonsklearn.linear_model.SGDClassifier能做小批量学习(mini-batch)吗?
文档里提到了SGD allows minibatch (online/out-of-core) learning, see the partial_fit method.
我感觉这个并不是mini-batch,只是online learning而已。
sklaern里的逻辑回归有做真正的mini-batch的吗?
Answer
partial_fit可以差不多来实现mini-batch。但是只是和最原始的Mini-batch不是同一个意思。
clf = linear_model.SGDRegressor(learning_rate = 'constant', alpha = 0, eta0 = 0.01, shuffle=True)
chunks = list(batcherator)
for _ in range(4):
random.shuffle(chunks)
for X_chunk, y_chunk in chunks:
clf.partial_fit(X_chunk, y_chunk)
y_predicted = clf.predict_proba(X)
sklearn做不到,它没有mini-batch的逻辑回归
Question 1002379: pyspark里unpersist()什么作用?
统计/机器学习 Pythonpyspark里unpersist()什么作用?
Answer
unpersist()是释放(缓存)的意思。所以对应着的是df.cache()。
有时候为了处理的速度,我们将某个dataframe放入缓存
df.cache()
使用完这个数据,我们需要把这个dataframe从缓存中释放出来。释放的命令就是
df.unpersist()
Question 1002397: 怎么把pandas dataframe中的一列转成一个list?
统计/机器学习 Python怎么把pandas dataframe中的一列转成一个list?
比如我有个dataframe,其中一列
>>> df['C']
0 1
1 2
2 4
3 0
怎么把它转成[1, 2, 4, 0]这样的list?
Answer
df["C"].tolist()
df.C.values.tolist()
list一下不就好了,或者numpy。array
Question 1002406: %matplotlib inline什么意思?
统计/机器学习 数据可视化 Python在jupyter notebook里import matplotlib之后再输入%matplotlib inline什么意思?
Answer
魔术命令,可以在notebook中显示用matplotlib绘制的图片。
其实在新版的jupyter notebook里,有没有这行代码已经没什么差别了
Question 1002408: 一个特征有两个可选的值,只需满足其中一个即可,该如何处理?
统计/机器学习 特征选择 Python比如,
car_length label
0 1 1
1 2 0
2 1.5,2 1
car_length 这个特征可以是0行是1,1行是2, 2行是1,2(代表取1或者2都可以)。
我想用一些树模型进行拟合,比如,gdbt,xgboost,请问该如何对car_length 这个特征进行处理?
Answer
如果是数值的话,可以取这两个的平均值或者最大值或者最小值。
然后你看交叉验证的结果,哪个好就用哪个。
Question 1002421: 怎么将两个pyspark dataframe以串联的形式合并?
统计/机器学习 Python两个pyspark dataframe的列和列名都是一样的,也就是Schema是一样的,怎么将它们以串联的形式合并?
Answer
df_concat = df_1.union(df_2)
Question 1002438: 怎么对pandas dataframe的列求众数
统计/机器学习 数据预处理 Python怎么对dataframe的一列求众数?
我试了np.mode,不过好像并没有用,报错如下
np.mode(data['type'])
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
in ()
----> 1 np.mode(data['type'])
AttributeError: module 'numpy' has no attribute 'mode'
Answer
pandas的dataframe有自带的
data['type'].mode()
>>> from scipy import stats
>>> stats.mode(df['col'])
Question 1002441: 如何对中文部分进行独热处理(one-hot)
统计/机器学习 自然语言处理 数据预处理 Pythonimport pandas as pd
import numpy as np
a = [['苹果', 10, 4.2], ['龙眼', '6.2,6.8', 0.03], ['荔枝', np.nan, np.nan]]
df = pd.DataFrame(a)
df.columns=['a','b','c']
print(df)
from sklearn import preprocessing
enc = preprocessing.OneHotEncoder()
# df['a'].encode('Unicode')
enc.fit(df['a'])
df['a'] = enc.transform([df['a']])
print('df[a]\n',df['a'])
输出结果:
a b c
0 苹果 10 4.20
1 龙眼 6.2,6.8 0.03
2 荔枝 NaN NaN
报错:
ValueError: could not convert string to float: '荔枝'
Answer
怎么一直没有人回答这个问题...
OneHotEncoder不能直接把string类型的列进行one-hot coding,你需要先用整数代替字符,比如说用LabelEncoder,然后再用OneHotEncoder。
这个问题sklearn onehotencoder的具体用法是和你一模一样的情况,数据中一列是字符形式。你直接看里面的代码就行了。
Question 1002464: pandas读取文件夹中所有的csv文件
统计/机器学习 Python I/O怎么用pandas读取文件夹中所有的csv文件?
读完之后不一定要合并,各自成为一个单独的dataframe就可以了。谢谢!
Answer
要利用glob
import glob
import pandas as pd
df = dict()
file_names = glob.glob("*.csv")
for file_name in file_names:
df[file_name] = pd.read_csv(file_name)
Question 1002477: 如何对pandas dataframe的行做循环?
统计/机器学习 Python如何对pandas dataframe的行做循环?类似于
for row in rows:
do_something
Answer
df = pd.DataFrame(np.random.randn(5, 3), columns=list('ABC'))
for index, row in df.iterrows():
print(row['A'], row['B'],row['C'])
df.apply(lamda,axis=0)
for i in range(len(df)):
print('i-th row is\n', df.iloc[i])
Question 1002480: numpy里的无穷大np.inf到底是多大呢?
统计/机器学习 Pythonnumpy里的无穷大np.inf到底是多大呢?有确切的数吗?
Answer
numpy用IEEE-754格式,一般numpy.inf是float64格式,能表示最大的数是$±(1-2^{-53})*2^{1024}=±1.79769×10^{308}$。
>>> print (1.-1./np.power(2.,53))*np.power(2.,1023)*2
1.7976931348623157e+308
>>> print (1.)*np.power(2.,1023)*2
inf
它就是一个符号,没有数值的,就是无穷大。任何数都小于它。
>> (10 ** 10) ** 10 <= np.inf
True
>> (np.inf + 1) == np.inf
True
>> (np.inf * 5) == np.inf
True
Question 1002482: 怎么对pyspark dataframe更改列名
统计/机器学习 PythonAnswer
kidd23的方法比较麻烦,直接用withColumnRenamed就行了
new_df = df.withColumnRenamed('old_name', 'new_name')
假如你要把df中一个叫old_col的列改成new_col,可以用以下的代码,其他列则不改变
import pyspark.sql.functions as F
new_df = (df
.select(*[F.col(s).alias(new_col) if s == old_col else s for s in df.columns]))
Question 1002519: pandas中获取一列日期和今天相差的天数
统计/机器学习 数据预处理 时间序列 Python我的pandas的dataframe中有一列是日期,并且已经通过如下的方式转换为日期格式了
df['dates'] = pd.to_datetime(df['dates'])
我下一步想做的事,得到一列'days_diff',就是'dates'那一列和今天相差的天数,过去和今天相差的是负数,未来和今天相差的是正数。
请问这要怎么操作?
Answer
试试这个~
from datetime import date
today = date(2018, 6, 23)
df['days_diff'] = (df['dates'] - today).apply(lambda x: x.days)
类似nlceyes的方法,不过直接调用了pandas里的today
df['days_diff'] = list(map(lambda x: x.days, df['dates'] - pd.to_datetime('today')))
Question 1002529: 如何用python计算均值的置信区间?
统计/机器学习 描述性统计 Python如何用python计算均值的置信区间?
谢谢!
Answer
需要调用numpy和scipy
import numpy as np, scipy.stats as st
st.t.interval(0.95, len(s)-1, loc=np.mean(s), scale=st.sem(s))
s是样本集,0.95是置信水平,len(s)-1是自由度。这个是根据t分布产生的置信区间。
如果考虑正态分布的,可以用
import numpy as np, scipy.stats as st
st.norm.interval(0.95, loc=np.mean(s), scale=st.sem(s))
Question 1002544: python里的continue是什么意思
统计/机器学习 Pythonpython新人,请问python里的continue是什么意思?
Answer
continute一般用在循环中,比如说下面的例子
for i in range(100):
if i % 3 == 1:
continue
do_something
如果i % 3 == 1,执行continue,跳过下面的do_something,重新开始下一次循环。
continue就是跳过剩下的命令
Question 1002546: matplotlib中bar plot横坐标的数字改成自定义的文字
统计/机器学习 数据可视化 Python比如我想用bar函数画出1到5月的销售额
用如下的代码
import matplotlib.pyplot as plt
plt.bar([1, 2, 3, 4, 5], rev)
plt.show()
图的效果如下
问题是怎么把1-5的数字,显示为自定义的文字呢?比如Jan, Feb, Mar, Apr, May之类的。谢谢各位!
Answer
plt.xticks轻松搞定
import matplotlib.pyplot as plt
plt.bar(range(1, 6), rev)
plt.xticks(range(1, 6), ['Jan', 'Feb', 'Mar', 'Apr', 'May'])
plt.show()
Question 1002550: 关于Python中 theano的相关问题
统计/机器学习 Python TensorFlowWindows操作系统安装theona后运行程序报错,不清楚问题在哪里,网上找不到解决方法,求助求助!!
Answer
感觉你是在import你的本地文件theano.py,而不是在import theano。
你把你的文件重命名试试呢?
Question 1002556: 怎么把英文字符串转为小写(python)?
统计/机器学习 自然语言处理 Python一个英文文本里有大写也有小写,怎么在python中把英文字符串转为全部都是小写?
Answer
str.lower()
>>> my_string = 'CHINA'
>>> my_string.lower()
china
Question 1002583: python里的<<或者>>符号是什么意思?
统计/机器学习 Pythonpython里的<<或者>>符号是什么意思?就是两个小于号连在一起,或者两个大于号连在一起。
Answer
位运算,左移和右移
a = 1
b = 1 << 4
print('a:\t0x%x\tb:\t0x%x' % (a,b))
# a: 0x1 b: 0x10
做bit manipulation的,不是逻辑符号
Question 1002595: plt.bar怎么设置每个bar的颜色?
统计/机器学习 数据可视化 Pythonplt.bar怎么设置每个bar的颜色?
import matplotlib.pyplot as plt
plt.bar(range(3), [10, 15, 20])
plt.show()
比如三个bar,默认是每个颜色都是一样的。但是如果我想让每个bar颜色不同(比如红、绿、蓝),那该怎么办?
Answer
import matplotlib.pyplot as plt
plt.bar(range(3), [10, 15, 20], color=['r', 'g', 'b'])
plt.show()
颜色可以参考下面:
Question 1002598: 把XGBRegressor保存到本地文件并调用
统计/机器学习 Python I/O我在python中train了一个XGBRegressor,怎么把它保存为本地文件,并且再调用呢?
Answer
这个和保存sklearn的模型是一样的
#训练
model = XGBRegressor()
model.fit(X, y)
#保存
from sklearn.externals import joblib
joblib.dump(model, 'my_xgbregressor.pkl')
#读取
model = joblib.load('my_xgbregressor.pkl')
Question 1002609: 在jupyter notebook后台进程没关闭的情况下,只要是之前使用过且没有shutdown的notebook一直会占用内存吗?
统计/机器学习 Python如题所示,因为这两天接触的数据量比较大,意识到了这个问题,突然发现有的曾经关闭过的notebook页面,打开后仍旧可以接着运行,那应该数据还一直占在内存中吧? 那每次执行完后都应当人为地shutdown吗?
Answer
如果只是浏览器关闭网页的话,程序实际上在后台还是运行的,内存空间还是被占用的。所以需要在jupyter里shutdown。
每个kernel都会占用内存以及进程,关闭网页并不能关闭kernel,shutdown之后kernel就被中止,内存会释放出来
Question 1002619: 如何对pyspark dataframe删除一列
统计/机器学习 Python怎么删除pyspark dataframe中的某一列?
Answer
df = df.drop('col')
也可以一次性删除多个列
cols_to_drop = ['c1', 'c2', 'c3', 'c4']
df = df.drop(*cols_to_drop)
drop_list = ['col1', 'col2', ...]
df = df.select([col for col in df.columns if col not in drop_list])
Question 1002631: sklearn训练classifier的时候报错Unknown label type
统计/机器学习 Python我的代码
clf = tree.DecisionTreeClassifier()
clf.fit(X, y)
报错内容
raise ValueError("Unknown label type: %r" % y_type)
ValueError: Unknown label type: 'continuous'
应该是我的y出了问题,但是我看了数据,我的y都是0,1的,应该没有问题,非常困扰
Answer
sklearn默认的y的类型必须是整数型,你的y可能是float类型,你转换一下应该就好了
y = np.array(y, dtype=int)
Question 1002634: 求助,按照百度的方法从日期提取年龄出现错误了
统计/机器学习 时间序列 PythonAttributeError: 'Series' object has no attribute 'datetime'
对时间序列还不熟悉,请教了
Answer
试试这个
import pandas as pd
data = {'birth':['2010/01/01', '2013/01/01']}
frame = pd.DataFrame(data)
frame['birth'] = pd.to_datetime(frame['birth'])
now_year = pd.to_datetime('today').year
frame['age'] = now_year - frame['birth'].apply(lambda x: x.year)
Question 1002636: python中实现box-cox变换的函数?
统计/机器学习 概率分布 数据预处理 Pythonpython中有什么函数可以实现box-cox变换的?
谢谢!
Answer
用法:
from scipy import stats
x = np.random.uniform(0, 1, 1000)
x_norm, lbda = stats.boxcox(x)
Question 1002649: python中百分位数的逆运算
统计/机器学习 描述性统计 Python如果有一个数a,我想知道a在数组S中的百分位数是多少?
反过来比较容易,就可以用numpy的percentile,比如
a = np.percentile(S, 10)
如果我已知了S和a,怎么求这个10呢?
Answer
numpy没有这个功能,scipy可以。scipy.stats.percentileofscore(data, score)
比如求50在S中的百分位
>>> from scipy import stats
>>> S = range(200)
>>> stats.percentileofscore(S, 50)
25.5
反过来,求S中第20百分位可以
>>> stats.scoreatpercentile(S, 20)
39.800000000000004
Question 1002654: pandas groupby agg中使用自定义函数
统计/机器学习 数据预处理 Python我有一个关于python编程的问题。用pandas我们可以进行groupby和agg的操作,比如
>>> df.groupby('my_col').agg(['mean', 'max'])
我们可以求每组的mean和max。如果我现在要在每组上用我的自定义的函数,该如何调用?
Answer
先写出自己定义的函数f,比如说我们要知道最大值和中位数的差
def my_func(x):
res = max(x) - np.median(x)
return res
df.groupby('my_col').agg([my_func])
如果有多个自定义的函数的话
df.groupby('loc_id').agg([my_func1, my_func2, my_func3])
Question 1002691: matplotlib.pyplot做折线图的时候,显示为虚线,或者点划线?
统计/机器学习 数据可视化 Python我在用matplotlib.pyplot做折线图,调用的是plot函数。
画图的时候,怎么设置才能显示为虚线,或者点划线?
Answer
import matplotlib.pyplot as plt
x = list(range(10))
y = [i*i for i in x]
plt.plot(x, y, linestyle=':')
plt.show()
点划线linestyle='-.'
短划线linestyle='--'
虚线
plt.plot(x, y, ls=':')
断线
plt.plot(x, y, ls='--')
点划线
plt.plot(x, y, ls='-.')
Question 1002706: 随机森林中的predict_proba
统计/机器学习 Python 数据竞赛在交通事故理赔的竞赛中,用随机森林进行理赔与否的预测,标杆模型中的代码简洁明了如下:
# -*- coding: utf-8 -*-
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
# 读取数据
train = pd.read_csv("C:\\python\\dataset\\random forest\\train.csv")
test = pd.read_csv("C:\\python\\dataset\\random forest\\test.csv")
submit = pd.read_csv("C:\\python\\dataset\\random forest\\sample_submit.csv")
# 删除id
train.drop('CaseId', axis=1, inplace=True)
test.drop('CaseId', axis=1, inplace=True)
# 取出训练集的y
y_train = train.pop('Evaluation')
# 建立随机森林模型
clf = RandomForestClassifier(n_estimators=100, random_state=0)
clf.fit(train, y_train)
#这里到底什么意思?
y_pred = clf.predict_proba(test)[:, 1]
# 输出预测结果至my_RF_prediction.csv
submit['Evaluation'] = y_pred
submit.to_csv('C:\\python\\dataset\\random forest\\my_RF_prediction.csv', index=False)
黄线部分的test 后面为什么跟着[:,1]是用pandas对test进行切片只取test第一列的意思么?但是test的第一列是Q1,仅用test第一列的数据导入函数中,去乞求得到predicted value,似乎说不过去啊。[:, 1] 的意思是什么?
谢谢您的回答
Answer
题主可以看看这个问题 如何理解predict_proba的返回值
Question 1002708: python产生一个随机置换?
统计/机器学习 抽样方法 Python怎么用python产生1,2,...,n的一个随机置换,比如1,3,2就是{1,2,3}的一个置换。
Answer
用numpy里的random模块可以调用permutation的函数,生成一个随机置换
>>> import numpy as np
>>> np.random.permutation(5)
array([1, 4, 0, 2, 3])
Question 1002736: 如何生成两个相关的标准正态随机变量
统计/机器学习 概率分布 抽样方法 Python假如有两个标准正态分布$D_1$和$D_2$,并且它们的协方差是0.5。
怎么分别从$D_1$和$D_2$生成随机变量呢?
求思路。如果有python的代码更好,谢谢!
Answer
先生成两个标准差为1的独立随机变量的采样$z_1,z_2$,假如要求的协方差为$\rho$,则相关的随机变量的采样$x_1=z_1$,$x_2=\rho z_1+\sqrt{1-\rho^2}z_2$。需要注意此时每个变量的标准差为1,也就是协方差矩阵的对角线都是1,此时两变量间的协方差等于相关系数。
扩展到生成N维相关随机变量$X~ \sim N(\mu,\Sigma)$,先生成N维独立随机变量$Z$,假设$CC^T=\Sigma$,则$X=\mu+CZ$。$C$可以由 Cholesky decomposition生成。
比如$N=2$时,$C=\begin{bmatrix} 1& 0 \\ \rho & \sqrt{1-\rho^2} \end{bmatrix}$
$CC^T=\begin{bmatrix} 1& \rho \\ \rho & 1 \end{bmatrix}$
import numpy as np
mean = [0, 0]
cov = [[1, 0], [0, 100]]
x, y = np.random.multivariate_normal(mean, cov, 5000).T
Question 1002760: python中怎么用matplotlib在一行里生成多个图?
统计/机器学习 数据可视化 Python比如这种效果
Answer
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 1, 100)
plt.figure(figsize=(10, 4))
# 一共有一行三列,现在画第一幅图
plt.subplot(1, 3, 1)
plt.plot(x, x ** 0.5)
# 一共有一行三列,现在画第二幅图
plt.subplot(1, 3, 2)
plt.plot(x, x ** 1)
# 一共有一行三列,现在画第三幅图
plt.subplot(1, 3, 3)
plt.plot(x, x ** 2)
plt.show()
Question 1002770: 朴素贝叶斯分类器 naive_bayes.MultinomialNB() 为啥和手算的结果不一致
统计/机器学习 贝叶斯 监督式学习 Python这是题目。
然后题目的答案是
用python代码如下
X1 = np.array([1,1,1,1,1,2,2,2,2,2,3,3,3,3,3])
X2 = np.array([1,2,2,1,1,1,2,2,3,3,3,2,2,3,3])
X_train = list(zip(X1,X2))
y_train = [-1,-1,1,1,-1,-1,-1,1,1,1,1,1,1,1,-1]
X_test = [[2,1]]
MNBclf = naive_bayes.MultinomialNB()
MNBclf.fit(X_train,y_train)
print(MNBclf.predict(X_test))
print(MNBclf.predict_proba(X_test))
这是结果
[1]
[[ 0.40579081 0.59420919]]
为什么会和书里的不一样
Answer
MultinormialNB应该用onehotcode。
import numpy as np
import sklearn.naive_bayes as nb
import matplotlib.pyplot as plt
from sklearn import preprocessing
X1 = np.array([1,1,1,1,1,2,2,2,2,2,3,3,3,3,3])
X2 = np.array([1,2,2,1,1,1,2,2,3,3,3,2,2,3,3])
X_train = list(zip(X1,X2))
enc = preprocessing.OneHotEncoder()
enc.fit(X_train)
X_train=enc.transform(X_train).toarray()
print(X_train)
y_train = np.array([-1,-1,1,1,-1,-1,-1,1,1,1,1,1,1,1,-1])
X_test = [[2,1]]
X_test = enc.transform(X_test).toarray()
print(X_test)
MNBclf = nb.MultinomialNB(alpha=1E-10)
# MNBclf = nb.GaussianNB()
MNBclf.fit(X_train,y_train)
print(MNBclf.predict(X_test))
print(MNBclf.predict_proba(X_test))
输出是
[-1]
[[0.75 0.25]]
如果不换成one hot,可以用nb.GaussianNB()
Question 1002809: pandas读取csv文件遇到UnicodeDecodeError
统计/机器学习 Python I/O我下面的代码读取csv文件
import pandas as pd
data = pd.read_csv('datafile.csv')
然后出现错误
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 12: invalid start byte
这个该如何解决?谢谢!
Answer
read_csv里默认的encoding是'utf-8',但是你的文件里应该是有utf-8不能识别的乱码,所以需要换个编码方式
试试下面的
data = pd.read_csv('datafile.csv', encoding = "ISO-8859-1")
今天使用sql导出的csv也是这个问题,除了导出设置是gbk, read_csv中的encoding我设置了gbk
Question 1002813: pandas 如何扔掉同时满足两个特征过滤条件的数据?
统计/机器学习 数据预处理 Python对数据 df ,A特征需要满足等于0,B特征需要满足等于1,如何扔掉出满足条件的数据呢?
df = df.drop( [ df ['A'] == 0 & df ['B'] == 1 , 0) ???
df = df.drop( [ (df.loc [df ['A'] == 0, 'B'] == 1).index , 0 ) ???
这两个方法都不对啊,正确的是什么呢?
Answer
pandas写 & 这类的逻辑判断的时候,把两边的逻辑条件都加上括号试一下。
Question 1002820: 'numpy.ndarray' object has no attribute 'head'
统计/机器学习 Python用head函数查看numpy array的前几行
a.head()
结果出现了如下的错误
AttributeError: 'numpy.ndarray' object has no attribute 'head'
应该怎么办啊
Answer
numpy.ndarray没有head这个方法,如果你想查看一个array的前k行的话,可以用
my_array[:k]
Question 1002821: 怎么把一个大的dataframe按行分割成若干个小的dataframe。
统计/机器学习 Python比如我的dataframe有一百行。现在我想把它分成10(平均,无放回)个小的dataframe?即返回10个dataframe
Answer
基本思路就是先生成0到99的随机排列,作为index,然后用前10个数来产生第一个小dataframe,然后类推。
你可以把10个小dataframe存在dict里面,比如叫sub_df。
sub_df = {}
rand_ind = np.random.permutation(100)
for i in range(10):
indices = rand_ind[10*i : 10*i + 10]
sub_df[i] = df.iloc[indices]
我自己测试了一下,应该没有问题
Question 1002827: sklearn.cluster.KMeans速度太慢,有什么解决方法?
统计/机器学习 无监督学习 Python 计算复杂度我在自己根据K Means图像压缩的教程在练习,但是sklearn.cluster.KMeans速度太慢,K大于50之后,就要等非常久,久到放弃,有什么好的解决办法吗?
Answer
试试用sklearn.cluster.MiniBatchKMeans代替KMeans,应该会快不少
Question 1002860: 对numpy array求每行的均值
统计/机器学习 Python比如下面这个array
>>> a = np.array([[1, 2], [3, 4], [5, 6]])
>>> a
array([[1, 2],
[3, 4],
[5, 6]])
怎么对它求每行的均值,得到
1.5
3.5
5.5
Answer
对array按行求均值
np.mean(a, axis=1)
对array按列求均值
np.mean(a, axis=0)
Question 1002890: 如何对将Python dictionary里的key按照value进行排序?
统计/机器学习 Python比如有一个dictionary
my_dict = {'A': 2, 'B': 6, 'C': 10, 'D': 3}
将key按照它们的value从小到大排序,返回的结果为
['A', 'D', 'B', 'C']
如何实现这样的功能?
Answer
>>> sorted(my_dict, key=my_dict.__getitem__)
['A', 'D', 'B', 'C']
Question 1002896: pd.read_csv读取数据时自动跳过空白行
统计/机器学习 数据预处理 Python I/O用pandas的read_csv方法读取数据时,怎么能自动跳过文件中的空白行?
Answer
在read_csv设置skip_blank_lines为True就可以了
data = pd.read_csv('path_to_my_file.csv', skip_blank_lines=True)
Question 1002917: 怎么把scipy.sparse.csr.csr_matrix转成numpy array
统计/机器学习 线性代数 Python怎么把稀疏矩阵scipy.sparse.csr.csr_matrix格式的变量转成正常numpy的array?
谢谢!
Answer
s.A可以得到一个numpy array
>>> import numpy as np
>>> import scipy.sparse
>>> my_matrix = scipy.sparse.csr_matrix((2,2))
>>> my_array = my_matrix.A
>>> type(my_array)
numpy.ndarray
Question 1002927: 如何将matplotlib生成的图片存到本地?
统计/机器学习 数据可视化 Python I/O我们一般用matplotlib.pyplot画图的时候,都是用
plt.show()
那么如何把生成的图片存到本地呢?比方说存成png格式或者jpg格式的图片
Answer
plt.savefig('my_plot.jpg')
Question 1002958: pandas操作出现ValueError: The truth value of a Series is ambiguous.
统计/机器学习 Python我选择dataframe里x1和x2都是正数的行
data = data[(data['x1'] > 0) and (data['x2'] > 0)]
结果报错,如下
ValueError: The truth value of a Series is ambiguous.
Use a.empty, a.bool(), a.item(), a.any() or a.all().
求解决方法
Answer
用&不要用and;同理对于或,用|不要用or
data = data[(data['x1'] > 0) & (data['x2'] > 0)]
Question 1003004: statsmodels里的ols怎么处理分类变量?
统计/机器学习 回归分析 数据预处理 Pythonstatsmodels里的ols怎么处理分类变量?最好是能够像R里那样,直接处理的,不然的话就要像sklearn那样先one-hot了。多谢各位老铁!
Answer
比如你有一个pandas的dataframe,叫做df,要预测列名是y,有两个特征,numerical特征x1和categorical特征x2,那么用下面的表达式就可以了,不需要做one-hot
import statsmodels.formula.api as smf
res = smf.ols(formula='y ~ x1 + C(x2)', data=df).fit()
Question 1003010: pandas dataframe insert报错ValueError: unbounded slice
统计/机器学习 Python我想把一列数值插入到dataframe倒数第二列
df.insert(-2, 'new_column', new_values)
结果报错
ValueError: unbounded slice
请教各位
Answer
第一个参量错了,第一个参量loc,必须是[0, n]之间的数,n是dataframe的列的个数。
df.insert(df.shape[1]-1, 'new_column', new_values)
上面这个代码可以让新的列插在倒数第二列的位置
Question 1003015: sklearn.cluster.KMeans怎么给样本加权重?
统计/机器学习 无监督学习 Python如果聚类问题中每个样本的不是等权重的怎么办?sklearn.cluster.KMeans怎么给每个样本加权重?
Answer
目前好像不支持,他们正在github上讨论(这里),而且已经有人在做了,估计以后就会有了吧。
如果题主急的话,可以看看这个https://github.com/oliviaguest/weighted_k_means,不过我也没用过,不知道效果如何。
Question 1003019: Jupiter notebook里一个cell显示多个dataframe
统计/机器学习 PythonJupiter notebook里一个cell怎么显示多个dataframe?
现在每个cell只显示最后一个dataframe,也可以用print,但是print出来的结果怪怪的
Answer
jupyter里用display
display(df1)
display(df2)
display(df3)
Question 1003027: 如何往numpy array中插入一列数组?
统计/机器学习 Python假设我有一个m行n列的numpy array,还有一个长度为m的数组,怎么将这个数组插入到这个array当中作为最后一列?
Answer
np.insert(array, loc, new_col, axis=1)
>>> a = np.array([[1, 2], [3, 4]])
>>> a
array([[1, 2],
[3, 4]])
>>> col = [8, 9]
>>> np.insert(a, a.shape[1], col, axis=1)
array([[1, 2, 8],
[3, 4, 9]])
col = [1, 2, 3]
array = np.column_stack((array, col))
a = np.array([1, 2 ,3])
b = np.array([4, 5, 6])
c = np.hstack((a,b))
np.vstack():在竖直方向上堆叠
np.hstack():在水平方向上平铺
Question 1003039: sklearn onehotencoder的具体用法
统计/机器学习 数据预处理 Python求sklearn onehotencoder的具体用法,最好能有小例子,如何把pandas中有字符的一列做onehotencoding。
非常感谢!
Answer
要先把文本转码成整数,然后再做独热。
我写了个函数
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
def LabelOneHotEncoder(data, categorical_features):
d_num = np.array([])
for f in data.columns:
if f in categorical_features:
le, ohe = LabelEncoder(), OneHotEncoder()
data[f] = le.fit_transform(data[f])
if len(d_num) == 0:
d_num = np.array(ohe.fit_transform(data[[f]]))
else:
d_num = np.hstack((d_num, ohe.fit_transform(data[[f]]).A))
else:
if len(d_num) == 0:
d_num = np.array(data[[f]])
else:
d_num = np.hstack((d_num, data[[f]]))
return d_num
比如有个df,f2和f3这两列是字符,要对它们做独热处理
上面那个函数的使用方法如下
>>> LabelOneHotEncoder(df, ['f2', 'f3'])
array([[ 0., 1., 0., 0., 0., 1., 0., 0.],
[ 1., 0., 1., 0., 0., 1., 0., 0.],
[ 2., 0., 0., 1., 0., 1., 0., 0.],
[ 3., 0., 0., 0., 1., 0., 1., 0.],
[ 4., 1., 0., 0., 0., 0., 1., 0.],
[ 5., 0., 1., 0., 0., 0., 1., 0.],
[ 6., 0., 0., 1., 0., 0., 0., 1.],
[ 7., 0., 0., 0., 1., 0., 0., 1.]])
不知道算不算答非所问,pandas中的get_dummies方法可以更加方便地实现独热编码
df = pd.DataFrame([['green', 10.1],
['red', 13.5],
['blue', 15.3]],
columns=['color', 'price'])
get_dummies 只对字符串列进行转换,数值列保持不变
pd.get_dummies(df)
pd.get_dummies(df).as_matrix()
如果要用sklearn的OneHotEncoder,要配合LabelEncoder
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
le = LabelEncoder()
ohe = OneHotEncoder(categorical_features=[0]) # 转换第一列
df['color'] = le.fit_transform(df['color'])
ohe.fit_transform(df.values).toarray()
Question 1003060: jupyter中怎么忽略所有的warning
统计/机器学习 Pythonjupyter notebook中怎么忽略所有的warning?希望所有的warning都不要显示出来。谢谢!
Answer
import warnings
warnings.filterwarnings("ignore")
Question 1003066: 怎么用Python画这种温度分布图
统计/机器学习 数据可视化 Python就是这样的图
Answer
这种看起来连续的图,可以用pcolormesh,应该也可以用heatmap来画
如果用pcolormesh的话,大概是下面这个方法
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
X, Y = np.meshgrid(np.linspace(0, 10, 1000), np.linspace(0, 10, 1000))
temperature = X + (Y - 5) ** 2
# 作图
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
c = ax.pcolormesh(X, Y, temperature, cmap='Spectral_r')
cb = fig.colorbar(c)
cb.set_label('Temperature')
plt.show()
效果为
Question 1003072: plt.subplots作图效果很奇怪,出问题
统计/机器学习 数据可视化 Python我是要画两个图,代码如下
plt.subplots(121)
plt.plot(X1, y1)
plt.subplots(122)
plt.plot(X2, y1)
plt.show()
效果如下,非常诡异,感觉是出了什么问题了
有遇到过这个问题的吗
Answer
应该是plt.subplot而不是plt.subplots
Question 1003075: K近邻算法(kNN)如何实现并行计算?
统计/机器学习 监督式学习 Python我在用sklearn.neighbors.KNeighborsClassifier,发现可以设置n_jobs,这是并行计算的参量。
那么kNN是怎么实现并行计算的呢?
Answer
我理解是sklearn只用了比较低级的kNN并行计算。在fit数据时(比如建立kdtree),并没有用到并行计算。只在predict()时才会用多个CPU去找。
至于用Map recude的kNN可以看 http://www.cs.utah.edu/~lifeifei/knnj/
可以利用类似于Map Reduce的思想:把训练集分成很多小块,求测试样本和每个小块里的样本的距离,然后再把结果汇总。
Question 1003076: 删除numpy array中指定的一列
统计/机器学习 Python怎么删除numpy array中指定的一列?
Answer
删除第k列
np.delete(my_array, k, axis=1)
Question 1003085: seaborn报错:regplot() got an unexpected keyword argument 'alpha'
统计/机器学习 数据可视化 Python用seaborn画回归图,想调一个透明度alpha,结果报错了。
sns.regplot(X, Y, color='green', alpha=0.4)
报错信息为
TypeError: regplot() got an unexpected keyword argument 'alpha'
请问这个该怎么解决,如何调整regplot的透明度呢?
Answer
在scatter_kws里单独设置alpha
sns.regplot(X, Y, color='green', scatter_kws={'alpha':0.5})
Question 1003102: 在python中获取模型运行的时间
统计/机器学习 Python 计算复杂度我有两个不同的模型,想比较两个模型的快慢,所以我想用结束的系统时间减去起始的时间,来计算运行时间。
那怎么在python获取系统当前的时间?
除了做减法,还有什么直接的方法吗?
Answer
一般来说 常用方法
starttime=time.time()
endtime=time.time()
totaltime=endtime-starttime
返回时间是秒级时间
可以再次以时间的60进制自己换算
可以定义一个函数,它的参数是另一个函数,每次计算函数执行时间的时候调用(@deco),详细的信息可以搜一下装饰器
Python 下还有两个显示程序运行时间和进度的库,不过前提是你需要知道有多少任务需要循环。
sofa 的编辑器不好用,直接截图了,可以参考原文链接Python | 乘上 Time Machine | Thinking Realm
Question 1003108: 怎么利用pandas获得一个列联表(contingency table)?
统计/机器学习 Python对一个pandas的dataframe中的某两列,怎么获得一个列联表(contingency table)?
Answer
tab = pd.crosstab(df['col_1'], df['col_2'])
Question 1003115: 如何调节seaborn里字体大小?
统计/机器学习 数据可视化 Python如何调节seaborn里字体大小?比如sns.barplot里就不支持fontsize
Answer
importseaborn之后通过set设置字号大小的缩放程度
import seaborn as sns
sns.set(font_scale=1.5)
Question 1003116: 用投票融合(VotingClassifier)的过程中出现问题,求帮助?
统计/机器学习 监督式学习 模型验证 Python 数据竞赛vot = VotingClassifier(estimators=[('lr', lr),('xgb',xgb_model), ('rf', rf),('gbdt',gbdt)], voting='hard')
vot.fit(train,y_train)
y_pred = vot.predict(test)
# print(y_pred)
submit['y'] = y_pred
submit.to_csv('my_voting_prediction.csv',index=False)
Answer
你是在做回归还是分类?
如果是分类的话,你需要把y的数值类型转换成int
如果是回归的话,VotingClassifier不支持回归,因为它是对分类器结果进行投票
Question 1003119: 自定义CountVectorizera中默认的英语stop_words
统计/机器学习 自然语言处理 数据预处理 Python当我们用sklearn.feature_extraction.text.CountVectorizer对英文文本进行处理的时候,怎么自定义英语的stop_words?
谢谢
Answer
直接设置stop_words这个参量就可以了
from sklearn.feature_extraction import text
my_stopwords = ['a', 'ab', 'abc']
text.CountVectorizer(stop_words= my_stopwords)
你也可以对系统默认的stop words添加自己的新词
my_stopwords = text.ENGLISH_STOP_WORDS.union(['a', 'ab', 'abc'])
text.CountVectorizer(stop_words= my_stopwords)
Question 1003121: python或者pandas读取excel xlsx文件中指定的一个sheet
统计/机器学习 Python I/O怎么用python或者最好是pandas读取xlsx文件中指定的一个sheet?
excel文件有多个sheet的时候,怎么读取其中指定的一个?
Answer
data = pd.read_excel('my_data.xlsx', sheet_name='sheet1')
sheet_name可以是sheet的名字,也可以是数字,表示是第几个sheet
data = pd.read_excel('my_data.xlsx', sheet_name=2)
Question 1003132: python里XGBClassifier怎么设置early stop?
统计/机器学习 监督式学习 Pythonpython里XGBClassifier怎么设置early stop?XGBClassifier里没有找到相关参数
Answer
early_stopping_rounds是在fit里设置,不是在XGBClassifier的初始化里
param_dist = {'objective':'binary:logistic', 'n_estimators':2}
clf = xgb.XGBClassifier(**param_dist)
clf.fit(X_train, y_train,
eval_set=[(X_train, y_train), (X_test, y_test)],
eval_metric='logloss',
early_stopping_rounds=5,
verbose=True)
evals_result = clf.evals_result()
Question 1003138: 怎么把pandas.DataFrame转成torch.tensor的格式?
统计/机器学习 Python 人工神经网络怎么把pandas.DataFrame转成torch.tensor的格式?
Answer
可以先转成numpy的array,再转成torch tensor
my_array = np.array(my_df)
my_tensor = torch.tensor(my_array)
如果你的pandas.DataFrame的数据格式统一,你可以
torch.from_numpy(pd_data.values)
Question 1003143: 怎么把datetime类型转为字符串类型,但只保留日期
统计/机器学习 时间序列 Python怎么把datetime类型转为字符串类型,但只保留日期,不保留具体的小时分钟秒。
比如原始datetime数据
Timestamp('2018-08-27 10:40:47.960878')
最后怎么得到str类型
'2018-08-27'
Answer
>>> my_timestamp.strftime('%Y-%m-%d')
'2018-01-01'
Question 1003161: pd Series的用法问题
统计/机器学习 PythonSeries值的获取主要有两种方式:
(1)通过方括号+索引的方式读取对应索引的数据,有可能返回多条数据
(2)通过方括号+下标值的方式读取对应下标值的数据,下标值的取值范围为:[0,len(Series.values)];另外下标值也可 以是负数,表示从右往左获取数据 。
如果索引是int类型,想要通过方括号+下标值的方式读取值,但是得到的是通过方括号+索引的方式读取到的值。
所以我想知道:如果索引是int类型,如何通过取得对应下标值的值。
Answer
你用loc和iloc就可以了,就不会混淆了
my_series.loc[索引]
my_series.iloc[下标]
Question 1003163: 在进行数值编码时出现错误,怎么解决?
统计/机器学习 数据预处理 特征选择 Python'Device_Type','Filled_Form','Gender','Var1','Var2','Mobile_Verified','Source'这些特征类型为object
# 数值编码
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
var_to_encode = ['Device_Type','Filled_Form','Gender','Var1','Var2','Mobile_Verified','Source']
for col in var_to_encode:
data[col] = le.fit_transform(data[col])
错误代码:
TypeError: '<' not supported between instances of 'float' and 'str'
Answer
你看看你的那些col里有没有null或者nan的情况,如果有的话会出错
TypeError: unorderable types: float() < str()
Question 1003177: numpy array里怎么用fillna填充nan的值?
统计/机器学习 Pythonpandas dataframe可以用fillna来填充nan的值,但是numpy array好像没有这个功能,还有什么办法能够填充np.array里的nan?
Answer
>>> a = np.array([[1, 2], [np.nan, 3]])
>>> a
array([[ 1., 2.],
[ nan, 3.]])
>>> a[np.isnan(a)] = 0 #将nan填充为0
>>> a
array([[ 1., 2.],
[ 0., 3.]])
Question 1003185: pip install opencv-python失败,难道非要编译安装?
统计/机器学习 计算机视觉 Pythonrikirobot@robot:/etc$ pip install opencv-python
Collecting opencv-python
Could not find a version that satisfies the requirement opencv-python (from versions: )
No matching distribution found for opencv-python
我在树莓派3上要安装opencv-python,可是居然报以上错误?有哪位知道这是什么问题?
Answer
看看你python的版本,opencv现在不支持python3.7
要么是你pip版本太旧了,更新一下
pip install --upgrade pip
没脾气,pip3 install opencv-python成功了,import cv2居然可用……
诡异……
更诡异的事情是,python2可以import cv2,而python3却失败了。
Question 1003193: numpy維度轉換
统计/机器学习 深度学习 数据预处理 Python請問要如何將numpy a,原本a.shpae是(10,10,4)轉成(10,10,3)呢??
Answer
你这个不是转换了,你切除了一部分数据
如果你只是想做slicing的话
a[:, :, :-1]
这样的话,a.shape就是(10,10,3)了
Question 1003195: python里求加权标准差或者加权方差的函数是什么?
统计/机器学习 描述性统计 Pythonpython里求加权标准差或者加权方差的函数是什么?加权平均是np.average,加权标准差有没有类似的函数?
Answer
使用statsmodels.stats.weightstats模块
from statsmodels.stats.weightstats import DescrStatsW
weighted_stats = DescrStatsW(array, weights=weights)
weighted_stats.mean # 加权平均
weighted_stats.std # 加权标准差
Question 1003216: 将pandas DataFrame保存成本地txt并删去列名
统计/机器学习 Python I/O怎么将pandas DataFrame保存成本地txt文件,每列用空格间隔,并删去列名?
Answer
header=None表示输出文本中不包含列名
sep=" "可以确保列之间是空格间隔的
df.to_csv('my_df.txt', header=None, index=False, sep=" ")
Question 1003233: 怎么在python中读取mat格式数据文件?
统计/机器学习 Python I/O我有一些matlab的数据,都是.mat格式,怎么在python中(最好是pandas, numpy之类)读取这些mat格式数据文件呢?
Answer
import scipy.io as sio
test = sio.loadmat('test.mat')
Question 1003250: python里怎么计算一个数组的熵(entropy)?
统计/机器学习 模型验证 Pythonpython里怎么计算一个数组的熵?
Answer
用stats.entropy来算
from scipy import stats
import pandas as pd
def Entropy(labels, base=2):
# 计算概率分布
probs = pd.Series(labels).value_counts() / len(labels)
# 计算底数为base的熵
en = stats.entropy(probs, base=base)
return en
运行结果
>>> Entropy([1, 1, 0, 1, 1])
0.72192809488736231
Question 1003251: 调用np.average()时报错TypeError: No loop matching
统计/机器学习 Python我用np.average(data['val'], weights=data['w'])计算加权平均,然后报错如下
TypeError: No loop matching the specified signature and casting was found for ufunc add
有遇到这个情况的吗?
Answer
估计是dtype的问题,你把type转成float之类的试试
data['w'] = data['w'].astype(float)
data['val'] = data['val'].astype(float)
Question 1003263: 怎么把torch.tensor转成numpy ndarray?
统计/机器学习 Python怎么把torch.tensor转成numpy ndarray?
Answer
torch转np:np_data = torch_data.numpy()
np转torch:torch_data = torch.from_numpy(np_data)
my_arr = my_tensor.numpy()
Question 1003270: Python中怎么把一个RGB彩色图像转成灰度黑白图像?
统计/机器学习 计算机视觉 PythonPython中怎么把一个RGB彩色图像转成灰度黑白图像?
需要使用opencv吗?
Answer
使用Pillow,通过pip install Pillow安装。
代码是:
from PIL import Image
img = Image.open('input_file.jpg').convert('L')
img.save('output_file.jpg')
from skimage import color
from skimage import io
# 读取图像
img_raw = io.imread('a.png')
# 转成灰度
img_gray = color.rgb2gray(img_raw)
# 保存图像
io.imsave('gray.png', img)
666
Question 1003271: python如何删除dict中的一个key?
统计/机器学习 Python如何删除python的dictionary的一个key?需要先判断是否存在这个key吗?
Answer
一种是先判断
if 'my_key' in my_dict: del my_dict['my_key']
一种是直接pop出来,如果存在就删除并且返回对应的值,如果不存在就返回None
my_dict.pop('my_key', None)
Question 1003283: pandas里dt.dayofweek返回的0是星期几?
统计/机器学习 时间序列 Pythonpandas里dt.dayofweek返回0到6的数,0对应的星期一还是星期天?
Answer
是星期一。
>>> s = pd.date_range('2016-12-31', '2017-01-08', freq='D').to_series()
>>> s.dt.dayofweek
2016-12-31 5
2017-01-01 6
2017-01-02 0
2017-01-03 1
2017-01-04 2
2017-01-05 3
2017-01-06 4
2017-01-07 5
2017-01-08 6
Freq: D, dtype: int64
2017-01-02,是星期一。
Question 1003298: 用tensorflow实现强化学习的dql算法报错:tensorflow.python.framework.errors_impl.InternalError: Could not find valid device for node. Node: {{node OneHot}} = OneHot[T=DT_FLOAT, TI=DT_FLOAT, axis=-1](dummy_input, dummy_input, dummy_input, dummy_input)
统计/机器学习 Python TensorFlow 强化学习代码:
import tensorflow as tf
import numpy as np
import gym
import random
from collections import deque
tf.enable_eager_execution()
num_episodes = 500
num_exploration_episodes = 100
max_len_episode = 1000
batch_size = 32
learning_rate = 1e-3
gamma =1
initial_epsilon = 1
final_epsilon = 0.01
class QNetwork(tf.keras.Model):
def __init__(self):
super().__init__()
self.dense1 = tf.keras.layers.Dense(units= 24, activation = tf.nn.relu)
self.dense2 = tf.keras.layers.Dense(units= 24, activation = tf.nn.relu)
self.dense3 = tf.keras.layers.Dense(units = 2)
def call(self, inputs):
x = self.dense1(inputs)
x = self.dense2(x)
x= self.dense3(x)
return x
def predict(self, inputs):
q_values = self(inputs)
return tf.argmax(q_values, axis=-1)
env = gym.make('CartPole-v1')
model = QNetwork()
optimizer = tf.train.AdamOptimizer(learning_rate)
replay_buffer = deque(maxlen = 10000)
epsilon = initial_epsilon
for episode_id in range(num_episodes):
state = env.reset()
episode = max(
initial_epsilon* (num_exploration_episodes - episode_id) / num_exploration_episodes,
final_epsilon
)
for t in range(max_len_episode):
env.render()
if random.random() < epsilon:
action = env.action_space.sample()
else:
action = model.predict(
tf.constant(np.expand_dims(state,axis=0, dtype = tf.float32)).numpy()
)
action = action[0]
next_state, reward, done, info = env.step(action)
reward = -10. if done else reward
replay_buffer.append((state,action,reward,next_state,done))
state = next_state
if done==1:
print('episode %d, epsilon %f, score %d' % (episode_id, epsilon, t))
break
if len(replay_buffer) >=batch_size:
batch_state, batch_action, batch_reward, batch_next_state, batch_done = [np.array(a, dtype=np.float32) for a in zip(*random.sample(replay_buffer, batch_size))]
q_value = model(tf.constant(batch_next_state, dtype = tf.float32))
y = batch_reward + (gamma* tf.reduce_max(q_value, axis=1))*(1-batch_done)
with tf.GradientTape() as tape:
loss = tf.losses.mean_squared_error(
lables=y,
predictions = tf.reduce_sum(model(tf.constant(batch_state)) * tf.one_hot(batch_action, depth=2), axis=1)
)
grads = tape.gradient(loss, model.variables)
optimizer.apply_gradients(grads_and_vars = zip(grads,model.variables))
报错:/home/kalarea/.conda/envs/py35/bin/python /home/kalarea/PycharmProjects/dql_demo/dpq_cartplie.py
/home/kalarea/.conda/envs/py35/lib/python3.5/site-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.
from ._conv import register_converters as _register_converters
episode 0, epsilon 1.000000, score 12
2018-10-15 12:54:59.165871: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
Traceback (most recent call last):
File "/home/kalarea/PycharmProjects/dql_demo/dpq_cartplie.py", line 77, in
predictions = tf.reduce_sum(model(tf.constant(batch_state)) * tf.one_hot(batch_action, depth=2),axis=1)
File "/home/kalarea/.conda/envs/py35/lib/python3.5/site-packages/tensorflow/python/ops/array_ops.py", line 2439, in one_hot
name)
File "/home/kalarea/.conda/envs/py35/lib/python3.5/site-packages/tensorflow/python/ops/gen_array_ops.py", line 4563, in one_hot
_six.raise_from(_core._status_to_exception(e.code, message), None)
File "
tensorflow.python.framework.errors_impl.InternalError: Could not find valid device for node.
Node: {{node OneHot}} = OneHot[T=DT_FLOAT, TI=DT_FLOAT, axis=-1](dummy_input, dummy_input, dummy_input, dummy_input)
All kernels registered for op OneHot :
device='CPU'; TI in [DT_INT64]; T in [DT_VARIANT]
device='CPU'; TI in [DT_INT32]; T in [DT_VARIANT]
device='CPU'; TI in [DT_UINT8]; T in [DT_VARIANT]
device='CPU'; TI in [DT_INT64]; T in [DT_RESOURCE]
device='CPU'; TI in [DT_INT32]; T in [DT_RESOURCE]
device='CPU'; TI in [DT_UINT8]; T in [DT_RESOURCE]
device='CPU'; TI in [DT_INT64]; T in [DT_STRING]
device='CPU'; TI in [DT_INT32]; T in [DT_STRING]
device='CPU'; TI in [DT_UINT8]; T in [DT_STRING]
device='CPU'; TI in [DT_INT64]; T in [DT_BOOL]
device='CPU'; TI in [DT_INT32]; T in [DT_BOOL]
device='CPU'; TI in [DT_UINT8]; T in [DT_BOOL]
device='CPU'; TI in [DT_INT64]; T in [DT_COMPLEX128]
device='CPU'; TI in [DT_INT32]; T in [DT_COMPLEX128]
device='CPU'; TI in [DT_UINT8]; T in [DT_COMPLEX128]
device='CPU'; TI in [DT_INT64]; T in [DT_COMPLEX64]
device='CPU'; TI in [DT_INT32]; T in [DT_COMPLEX64]
device='CPU'; TI in [DT_UINT8]; T in [DT_COMPLEX64]
device='CPU'; TI in [DT_INT64]; T in [DT_DOUBLE]
device='CPU'; TI in [DT_INT32]; T in [DT_DOUBLE]
device='CPU'; TI in [DT_UINT8]; T in [DT_DOUBLE]
device='CPU'; TI in [DT_INT64]; T in [DT_FLOAT]
device='CPU'; TI in [DT_INT32]; T in [DT_FLOAT]
device='CPU'; TI in [DT_UINT8]; T in [DT_FLOAT]
device='CPU'; TI in [DT_INT64]; T in [DT_BFLOAT16]
device='CPU'; TI in [DT_INT32]; T in [DT_BFLOAT16]
device='CPU'; TI in [DT_UINT8]; T in [DT_BFLOAT16]
device='CPU'; TI in [DT_INT64]; T in [DT_HALF]
device='CPU'; TI in [DT_INT32]; T in [DT_HALF]
device='CPU'; TI in [DT_UINT8]; T in [DT_HALF]
device='CPU'; TI in [DT_INT64]; T in [DT_INT8]
device='CPU'; TI in [DT_INT32]; T in [DT_INT8]
device='CPU'; TI in [DT_UINT8]; T in [DT_INT8]
device='CPU'; TI in [DT_INT64]; T in [DT_UINT8]
device='CPU'; TI in [DT_INT32]; T in [DT_UINT8]
device='CPU'; TI in [DT_UINT8]; T in [DT_UINT8]
device='CPU'; TI in [DT_INT64]; T in [DT_INT16]
device='CPU'; TI in [DT_INT32]; T in [DT_INT16]
device='CPU'; TI in [DT_UINT8]; T in [DT_INT16]
device='CPU'; TI in [DT_INT64]; T in [DT_UINT16]
device='CPU'; TI in [DT_INT32]; T in [DT_UINT16]
device='CPU'; TI in [DT_UINT8]; T in [DT_UINT16]
device='CPU'; TI in [DT_INT64]; T in [DT_INT32]
device='CPU'; TI in [DT_INT32]; T in [DT_INT32]
device='CPU'; TI in [DT_UINT8]; T in [DT_INT32]
device='CPU'; TI in [DT_INT64]; T in [DT_INT64]
device='CPU'; TI in [DT_INT32]; T in [DT_INT64]
device='CPU'; TI in [DT_UINT8]; T in [DT_INT64]
[Op:OneHot] name: one_hot/
Exception ignored in:
Traceback (most recent call last):
File "/home/kalarea/gym/gym/envs/classic_control/rendering.py", line 143, in __del__
File "/home/kalarea/gym/gym/envs/classic_control/rendering.py", line 62, in close
File "/home/kalarea/.conda/envs/py35/lib/python3.5/site-packages/pyglet/window/xlib/__init__.py", line 480, in close
File "/home/kalarea/.conda/envs/py35/lib/python3.5/site-packages/pyglet/gl/xlib.py", line 345, in destroy
File "/home/kalarea/.conda/envs/py35/lib/python3.5/site-packages/pyglet/gl/base.py", line 334, in destroy
File "/home/kalarea/.conda/envs/py35/lib/python3.5/site-packages/pyglet/gl/xlib.py", line 335, in detach
File "/home/kalarea/.conda/envs/py35/lib/python3.5/site-packages/pyglet/gl/lib.py", line 97, in errcheck
File "
File "
File "
TypeError: 'NoneType' object is not iterable
Process finished with exit code 1
Answer
我也是看的一个增强学习小游戏代码,貌似win10下gpu版tensorflow碰到tf.one_hot会出问题。我的解决方式是换个one_hot的等效方式,我用的是from keras.utils.np_utils import to_categorical。keras确实要精简不少。也可以自己定义实现one_hot
Question 1003306: GradientBoostingClassifier的每次输出结果不同
统计/机器学习 监督式学习 Python使用sklearn的GradientBoostingClassifier 。在相同参数,相同训练集,相同测试集情况下,预测分类每一次的结果都不同?
Answer
你固定random_state了么?
GradientBoostingClassifier(你的参数, random_state=0)
Question 1003338: 怎么让DataFrame按照某一列绝对值从小到按排列?
统计/机器学习 Python怎么让pandas DataFrame按照某一列的绝对值从小到按排列?
Answer
没有直接的函数可以用,只能先建一个辅助列,然后根据辅助列排序,然后再把辅助列删掉
代码如下
In [162]:
df['sort_helper'] = df['b'].abs()
df.sort_values('sort_helper').drop('sort_helper', axis=1)
Out[162]:
a b
2 3 -1
3 4 2
0 1 -3
1 2 5
4 5 -9
比如按照‘a'列的绝对值从小到大排序
df.iloc[df['a'].abs().argsort()]
按照绝对从大到小排序
df.iloc[df['a'].abs().argsort()[::-1]]
Question 1003348: python中如何产生交互项?
统计/机器学习 监督式学习 数据预处理 特征选择 Python比如我想对两个特征x1和x2做交互项,在python里有什么方法吗?
在R里的话,可以直接用
y ~ x1 + x2 + x1:x2
python里如果是sklearn模型的话,怎么能够得到两个特征的交互项呢?
Answer
sklearn里的PolynomialFeatures可以基本实现这个功能
from sklearn.preprocessing import PolynomialFeatures
# 新建一个dataframe
X = pd.DataFrame()
X['x1'] = [1, 1, 1, 2, 0, 0]
X['x2'] = [3, 2, 1, 3, 2, 1]
下面构造交互项
interaction = PolynomialFeatures(2, interaction_only=True, include_bias=False)
X_transformed = interaction.fit_transform(X)
得到的X_transformed就有三列,第三列是x1和x2的乘积
array([[ 1., 3., 3.],
[ 1., 2., 2.],
[ 1., 1., 1.],
[ 2., 3., 6.],
[ 0., 2., 0.],
[ 0., 1., 0.]])
直接手算似乎更方便
df['x1_x2'] = df['x1'] * df['x2']
Question 1003350: python如何对日期做遍历?有没有类似range的函数?
统计/机器学习 时间序列 Pythonpython里对整数遍历很方便,可以用
for i in range(5, 10)
来对5到10做遍历。
如果是日期变量,怎么进行快速遍历?比如说从2018-09-01到2018-10-01。
Answer
pandas里有date_range,很方便
import pandas as pd
pd.date_range('2018-09-01', '2018-09-07', freq='D')
输出结果为
DatetimeIndex(['2018-09-01', '2018-09-02', '2018-09-03', '2018-09-04',
'2018-09-05', '2018-09-06', '2018-09-07'],
dtype='datetime64[ns]', freq='D')
from datetime import date, timedelta
d1 = date(2019, 5, 10) # start date
d2 = date(2019, 5, 20) # end date
dates_range = [d1 + timedelta(i) for i in range((d2-d1).days + 1)]
Question 1003356: 怎么改变pandas dataframe里column的顺序?
统计/机器学习 Python如果我想把最后一列移动到第二列的位置上,该怎么操作?
Answer
分两步:取出最后一列,插到第二列之前。
last_col = df.pop(df.columns[-1])
df.insert(1, last_col.name, last_col)
Question 1003381: matplotlib一个画板上多个图叠加,如何决定图层上下?
统计/机器学习 数据可视化 Python比如我要在一个画板上叠加三个图,如下
import matplotlib.pyplot as plt
# 第一个图
plt.plot(x, y1)
# 第二个图
plt.scatter(x, y2)
# 第三个图
plt.plot(x, y3, 'r--')
plt.show()
怎么调整才能使得第一个图在最上层,第二图在中间,第三个图在最下层?
Answer
plt里很多function都有zorder这个属性,类似于css里的z-index,zorder大的图像在上层,zorder小的图像在下层(有可能被遮盖)
你上面的要求,用zorder就表示为如下的代码
# 第一个图
plt.plot(x, y1, zorder=30)
# 第二个图
plt.scatter(x, y2, zorder=20)
# 第三个图
plt.plot(x, y3, 'r--', zorder=10)
Question 1003397: pyspark dataframe的collect()方法是什么意思?
统计/机器学习 Pythonpyspark dataframe的collect()方法是什么意思?有什么用?
Answer
spark_df.collect()相当于spark_df.show(全部行)
就是一次性把这个dataframe里的所有行显示出来
Question 1003401: python中怎么把千位分隔符以及货币符号去掉转成数值形式?
统计/机器学习 数据预处理 Pythonpython中怎么把千位分隔符以及货币符号去掉转成数值形式?
比如下面的这种
$10,000
¥1,000,000.00
怎么转换成数值?
Answer
用正则表达就可以了
from re import sub
money = '¥1,000,000'
val = float(sub(r'[^\d.]', '', money))
Question 1003409: LSTM stock prediction
统计/机器学习 时间序列 Python 人工神经网络最近也试做了一个Lstm的范例,我让它学了6000根的K棒,并用90根的K棒去预测下一根的K棒,学完之后我把这个Model save成一个H5档,照理说一个新价格来,是不是x_test有最近的90天数据就行了?还是x_te要必须是原来6000的那个数据更新到最新?因为拿最近90天的跟把6000笔资料档数据更新后,这二种,数据跑出来差有点多,我不懂为什么会有差别?model.不是已经学完6000笔了吗?我为什么不能只取最近90笔去预测下一个价格吗?
window = 90
x_test, y_test = data_helper(df, window)
model = load_model('test.h5')
p = model.predict(x_test)
Answer
是的,用最近90天的就能预测下一天的了。如果你的x_test只有90天的数据,你也就只有一个prediction吧,然后你拿一个prediction和一个真值做比较,得到误差吗?
Question 1003414: python中如何修改时间戳变量里的小时?
统计/机器学习 时间序列 Pythonts是我自己定义的一个时间戳变量,包含日期小时分等信息。ts里小时是10
>>> ts.hour
10
我想把它重新赋值为12
>>> ts.hour = 12
结果报错,如下
AttributeError: attribute 'hour' of 'datetime.datetime' objects is not writable
请问应该如何才能修改datetime变量的小时?
Answer
使用datetime.replace()函数
dt = "2016-05-05 20:28:54"
dt = datetime.datetime.strptime(dt, "%Y-%m-%d %H:%M:%S")
print(dt)
print(dt.hour)
dt = dt.replace(hour=12)
print(dt)
print(dt.hour)
Question 1003419: pyspark groupby 加权平均?
统计/机器学习 数据预处理 Python比如说对df['id']进行groupby,df['value']是数值,df['weight']是权重,怎么对pyspark dataframe对id进行加权平均,有没有类似这样的功能
df.groupby('id').agg(weight_avg('value', 'weight'))
新上手pyspark,不大熟悉
Answer
并没有直接做加权平均的函数,你可以自己写出表达式来
from pyspark.sql import functions as F
df = df.groupby('id')\
.agg(F.sum(F.col('value') * F.col('weight'))/F.sum(F.col('weight'))\
.alias('w_mean'))
你也可以自己按照上面的式子写udf
Question 1003420: keras load_model报错
统计/机器学习 深度学习 Python 人工神经网络 TensorFlow我用Keras构建了一个神经网络,可以训练,也可以用model.save("model.h5")保存模型,但是当我用model = load_model('model.h5')载入模型时就有如下报错:
Traceback (most recent call last):
File "C:/programming/pycharm/cnn_attention_lstm/cnn_attention_lstm/train7.py", line 31, in
main()
File "C:/programming/pycharm/cnn_attention_lstm/cnn_attention_lstm/train7.py", line 23, in main
history = classifier.fit(data_dir_path=input_dir_path, model_dir_path=output_dir_path, data_set_name=data_set_name)
File "C:\programming\pycharm\cnn_attention_lstm\cnn_attention_lstm\model7again.py", line 113, in fit
model = self.create_model()
File "C:\programming\pycharm\cnn_attention_lstm\cnn_attention_lstm\model7again.py", line 66, in create_model
model = load_model('model.h5')
File "C:\Users\tong\AppData\Local\Programs\Python\Python36\Lib\site-packages\keras\engine\saving.py", line 263, in load_model
load_weights_from_hdf5_group(f['model_weights'], model.layers)
File "C:\Users\tong\AppData\Local\Programs\Python\Python36\Lib\site-packages\keras\engine\saving.py", line 915, in load_weights_from_hdf5_group
reshape=reshape)
File "C:\Users\tong\AppData\Local\Programs\Python\Python36\Lib\site-packages\keras\engine\saving.py", line 554, in preprocess_weights_for_loading
weights = convert_nested_time_distributed(weights)
File "C:\Users\tong\AppData\Local\Programs\Python\Python36\Lib\site-packages\keras\engine\saving.py", line 513, in convert_nested_time_distributed
layer.layer, weights, original_keras_version, original_backend)
File "C:\Users\tong\AppData\Local\Programs\Python\Python36\Lib\site-packages\keras\engine\saving.py", line 556, in preprocess_weights_for_loading
weights = convert_nested_model(weights)
File "C:\Users\tong\AppData\Local\Programs\Python\Python36\Lib\site-packages\keras\engine\saving.py", line 532, in convert_nested_model
original_backend=original_backend))
File "C:\Users\tong\AppData\Local\Programs\Python\Python36\Lib\site-packages\keras\engine\saving.py", line 556, in preprocess_weights_for_loading
weights = convert_nested_model(weights)
File "C:\Users\tong\AppData\Local\Programs\Python\Python36\Lib\site-packages\keras\engine\saving.py", line 544, in convert_nested_model
original_backend=original_backend))
File "C:\Users\tong\AppData\Local\Programs\Python\Python36\Lib\site-packages\keras\engine\saving.py", line 673, in preprocess_weights_for_loading
elif layer_weights_shape != weights[0].shape:
IndexError: list index out of range
Process finished with exit code 1
卡在这里好几天了,萌新求大神点拨,不胜感激
Answer
不知道你的keras的版本是什么,一些版本的确load_model的时候有bug,
比如这个https://github.com/keras-team/keras/issues/4143
还有这个https://github.com/keras-team/keras/issues/10608
不同的版本都有类似的问题
有人自己写了一个save和load,题主可以试试https://github.com/keras-team/keras/issues/10608#issuecomment-427817070
Question 1003442: python中求加权中位数
统计/机器学习 描述性统计 Pythonpython里求加权平均可以用numpy.average,有没有类似可以求加权中位数的方法?
谢谢!
Answer
你装一个wquantiles(pip install wquantiles),然后可以直接用weighted来算加权中位数
weighted.median(values, weights)
Question 1003447: lightgbm.LGBMModel和lightgbm.LGBMClassifier该用哪个?
统计/机器学习 监督式学习 Pythonpython的lightgbm模块里面好几个模型,一个是lightgbm.LGBMClassifier,还有一个是lightgbm.LGBMRegressor,此外还有一个是lightgbm.LGBMModel。我现在是要做分类,到底是用LGBMClassifier还是LGBMModel?这两个效果有什么区别吗?
Answer
直接用的话,分类是LGBMClassifier,回归是LGBMRegressor。
如果要用LGBMModel,要在参数objective指定你的任务类型(regression, binary, multiclass, lambdarank),我一般都是直接用LGBMClassifier或者LGBMRegressor,没用过LGBMModel,不过我觉得指定了任务类型之后,其他参数一样的情况下,效果应该是一样的,因为LGBMClassifier是继承自LGBMModel,objective默认设置为binary或者multiclass。
Question 1003452: XGBClassifier和XGBRegressor里的base_score有什么用?
统计/机器学习 监督式学习 PythonXGBClassifier和XGBRegressor里都有一个base_score变量,这个变量有什么用,需要设置吗?还是作为调参的选项?
Answer
base_score就是总体的均值,对于二元分类问题,base_score就是1占据的比重;对于回归问题,base_score就是整体的均值。
如果样本有权重,base_score就应该设置为加权均值。
base_score相当于是迭代的初始的起点,如果设置base_score的话,并且设置为总体均值的话,应该能够起到加快收敛的效果,但是即使没有设置base_score,只要Learning rate适当,迭代步数够多,设置base_score与否也不影响最终结果。
base_score – The initial prediction score of all instances, global bias.
Question 1003454: 找到pd.DataFrame中某个列名对应的下标?
统计/机器学习 Python比如有一个dataframe,列分别是
'col1', 'col2', 'col3', 'col5', 'col10'
其中'col5'是第四列,下标是3。对于一个任意的列名,如何找到这个列的位置,也就是对应的下标?
Answer
df.columns.get_loc("col1")
Reference: https://stackoverflow.com/questions/13021654/get-column-index-from-column-name-in-python-pandas
Question 1003466: pyspark里如何进行SELECT DISTINCT操作?
统计/机器学习 Pythonsql里可以SELECT DISTINCT col1, col2 FROM tab
怎么对pyspark的dataframe进行这样的select distinct的操作呢?
Answer
df.select('Col1', 'Col2').distinct()
Question 1003471: numpy.histogram怎么生成直方图?
统计/机器学习 描述性统计 数据可视化 Pythonnumpy有个直方图函数histogram,比如说
np.histogram(a, bins=20)
但是这个函数的返回结果并不显示出图像,这该怎么办?
Answer
np.histogram不能直接生成直方图,np.histogram返回的是每个bin的上下界和每个bin里的样本的个数
如果需要显示出图像的话可以用matplotlib
import matplotlib.pyplot as plt
plt.hist(a, bins=20)
plt.show()
Question 1003481: xgboost的sklearn接口有n_estimators参数,xgboost原始接口没有这个参数?
统计/机器学习 监督式学习 Pythonxgboost的sklearn接口有n_estimators参数,也就是树的个数。但是xgboost原始接口没有这个参数?
Answer
有的,名字换掉了,原始接口里是num_boost_round,不过要注意的是原始接口的默认值是10,sklearn接口里默认值是100~
Question 1003507: 返回python list里各个元素的大小排序?
统计/机器学习 Python如果有一个list
[2, 8, 4, 6]
我想得到它们的大小次序,比如8是最大的,对应着1,6是第二大的,对应2,所以想得到
[4, 1, 3, 2]
在python里该怎么实现这个操作?
Answer
用scipy比较方便
from scipy import stats
nums = [2, 8, 4, 6]
ranks = len(nums) - stats.rankdata(nums) + 1
最后的结果ranks
array([ 4., 1., 3., 2.])
Question 1003514: LPA算法问题
统计/机器学习 半监督学习 PythonLPA算法(标签传播算法)的原理非常简单,我自己用python实现了一下,但是为什么和调用igraph库的最终结果模块度相差甚远
Answer
LPA的算法本身有随机性,而且收敛也不稳定,很多包都已经进行了优化,你自己实现的肯定没有各种库好
Question 1003521: gc.collect()返回值是什么意思
统计/机器学习 Pythonpython里gc.collect()命令可以回收没有被使用的空间,但是这个命令还会返回一个数值,那么返回值是什么意思
Answer
gc.collect()返回的整数,是清除掉的垃圾变量的个数。
Question 1003524: 怎么把dataframe的一列转成整数类型
统计/机器学习 数据预处理 Python怎么把pandas dataframe的一列转成整数类型
我试了用numpy,比如
df['a'] = np.int(df['a'])
结果报错
TypeError: cannot convert the series to
请问有什么方法可以把pandas dataframe的一列转成整数类型
Answer
df['a'] = df['a'].astype(int)
b['std_fit_time_int'] = b['std_fit_time'].astype(int)
Question 1003536: pandas报错ValueError: Cannot convert non-finite values (NA or inf) to integer
统计/机器学习 Python我用df['col'].astype(int)转换成int类型时候,出现了以下错误
ValueError: Cannot convert non-finite values (NA or inf) to integer
应该是原数据中含有nan或者inf导致的,我想要得到整数型有什么解决办法呢?
Answer
np.nan或者np.inf都是float的类型,而且无法转成int,所以就报错了
建议把nan或者inf替换成0之类的
df.replace(np.nan, 0, inplace=True)
df.replace(np.inf, 0, inplace=True)
Question 1003544: 怎么自定义sklearn GridSearchCV中评估函数的阈值
统计/机器学习 监督式学习 模型验证 Python怎么自定义sklearn GridSearchCV中评估函数的阈值,比如说我想把precision定义为大于0.7才算是true
Answer
可能你需要用make_scorer自己定义一个scoring了,然后在GridSearchCV把scoring=你的scoring函数名
-----二更-----
也可以不用make_scorer,自己定义一个,在自己定义的scoring里面调用predict_proba得到概率
下面是一个例子
def my_scorer(clf, X, y_true):
class_labels = clf.classes_
y_pred_proba = clf.predict_proba(X)
error = ...
return error
gs = GridSearchCV(estimator=KNeighborsClassifier(),
param_grid=[{'n_neighbors': [6]}],
cv=5,
scoring=my_scorer)
Question 1003549: yolov3-tiny一个maxpool层算出的结果为什么和pytorch上的公式不一样
统计/机器学习 计算机视觉 Python 人工神经网络就是这一层maxpool,我使用pytorch上的公式计算出来的尺寸是12*12的
有了解的么?
Answer
去看了源码,原来是里面有个判断,当size=2,stride=1时会做一个nn.ZeroPad2d((0, 1, 0, 1))...
一脸黑线
Question 1003551: 可视化InvocationException: GraphViz's executables not found
统计/机器学习 数据可视化 Python我参考了可视化sklearn决策树的结构里面的代码
graph = graphviz.Source(dot_data)
但是报错
InvocationException: GraphViz's executables not found
我用的是centos系统,而且python里装了sklearn和graphviz,不知道这个问题怎么解决
Answer
这个问题和python没有关系,是你的操作系统里没有graphviz
mac上
brew install graphviz
centos上
yum install graphviz
Question 1003569: FM算法(因子分解机)有专门的算法框架吗?
统计/机器学习 监督式学习 PythonFM算法(因子分解机)在ctr问题上有广泛应用,我在网络搜索不到FM的算法框架。FM算法(因子分解机)有专门的算法框架吗?
Answer
好像没有现成的框架,至少sklearn和scipy里没有。
我刚刚搜了一下,感觉这个xlearn可以试试,不过我也没有用过。
Question 1003570: 怎么把python的dict存为json格式文件
统计/机器学习 Python I/O怎么把一个dict类型的变量存为json格式的文件到本地?
Answer
使用dumps将dict转化成json格式写入到json文件中
import json
def dict_to_json():
dict = {}
dict['name'] = '123'
dict['age'] = 10
dict['sex'] = 'male'
#转换成json
j = json.dumps(dict)
#写到json文件
fileObject = open('jsonFile.json', 'w')
fileObject.write(j)
fileObject.close()
if __name__ == '__main__':
dict_to_json()
import json
my_dict = {'year': '2018', 'day': '12-04'}
with open('my_dict.json', 'w') as outfile:
json.dump(my_dict, outfile)
Question 1003582: 怎么对dataframe中的某一列groupby求缺失值的个数?
统计/机器学习 数据预处理 Python假设一个pandas dataframe,有两列,一列a,一列b,我想按照a列group by,数b列中的缺失值的个数,请问该如何完成代码?
Answer
pandas里没有累计缺失值个数的函数,所以要用lambda
df.groupby('a').agg({'b': lambda x: x.isnull().sum()})
Question 1003585: sns barplot调整置信水平
统计/机器学习 描述性统计 数据可视化 Pythonseaborn的barplot可以自动画出带置信区间的柱状图,上面的那段黑线就是置信区间,我想知道seaborn里置信水准的默认值是多少?能不能画成0.90的置信区间
Answer
Question 1003586: Python tf神经网络二分类,最后结果都是一样的
统计/机器学习 计算机视觉 Python 人工神经网络 TensorFlow神经网络input是140个样本 1296维度的特征值,label前60是[1.0, 0.0] 后面是[0.0, 1.0],想来实现二分类,可是我用softmax交叉熵+L2正则化,训练出来的output全是一个相同的1*2矩阵。
有没有大神可以看出来错在哪里 T_T
xs = tf.placeholder(tf.float32,shape=(None, 36*36))
ys = tf.placeholder(tf.float32,shape=(None,2))
layer1_node = 150 # 第一层隐含层神经元个数
# first layer inference
L1_Weights = tf.Variable(tf.random_normal([36*36,layer1_node], stddev=0.1, seed=1))
L1_biases = tf.Variable(tf.zeros([1,layer1_node]) + 0.1)
L1_out = tf.matmul(xs, L1_Weights) + L1_biases
L1_out = tf.nn.relu(L1_out)
# second layer inference
L2_Weights = tf.Variable(tf.random_normal([layer1_node,2], stddev=0.1, seed=1))
L2_biases = tf.Variable(tf.zeros([1,2]) + 0.1)
out = tf.matmul(L1_out, L2_Weights) + L2_biases
# cross entropy
out_pro = tf.nn.log_softmax(out)
cross_entropy = -tf.reduce_sum(ys*out_pro)
cross_entropy_mean = tf.reduce_mean(cross_entropy)
# regularization
regularizer = tf.contrib.layers.l2_regularizer(0.1)
regularization = regularizer(L1_Weights) + regularizer(L2_Weights)
# loss
loss = cross_entropy_mean + regularization
# backward
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss) # 基础梯度下降法
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for i in range(20000):
sess.run(train_step,feed_dict={xs:recon_imgs,ys:label})
if i % 50 == 0:
print(sess.run(loss,feed_dict={xs:recon_imgs,ys:label}))
print(sess.run(out,feed_dict={xs:recon_imgs,ys:label}))
output:[[-0.09252657 0.29252994],…… 全是一样的。。
梯度下降试着用过动量法,但是不收敛。。
Answer
试试调一调learning rate吧,然后你只用一层的结构试试看,debug一下
虽然还没找到错误出在哪,但是先记录下:
1. 把隐含层去掉后,即只有输入层和输出层,output能看的出来有分类,错误可能是出在了hidden_layer上,但是还没有找出来到底在哪。
2. 正则化0.1太小了 可能找不到最优 我调成0.8之后就对了
有可能是l2_regularizer的参数太大了,Loss主要由regularization控制。因为你第一层的L1_weights个数36*36*150远大于L2_weights个数150*2,去掉L1后regularization急剧下降,LOSS由cross entropy控制。
你最好把两种配置的cross entropy和regularization都显示出来。
Question 1003606: xgboost里怎么使用KS值?
统计/机器学习 监督式学习 模型验证 Python只能自定义了么?
Answer
用KS statistics做early stopping么?应该就自己写一个了,自带的eval函数没有ks
Question 1003608: 画图的时候RuntimeError: Invalid DISPLAY variable
统计/机器学习 数据可视化 Python我在jupyter notebook里画图没有任何问题,但是如果在terminal里画图,跑到
plt.plot(x, y)
就立即出差了,显示
RuntimeError: Invalid DISPLAY variable
这个情况该如何解决?
Answer
在terminal里好像不能直接用,需要先声明后端是agg
然后再引用marplotlib.pyplot,顺序也不能颠倒
import matplotlib
matplotlib.use('agg')
import matplotlib.pyplot as plt
Question 1003610: 怎麼將dataframe 欄位 對應到原有的csv檔 而寫入
统计/机器学习 数据预处理 Python0 王大嬌
0 0.450196 數學
1 1.889275 國文
2 1.889275 社會
寫入 原有csv
Answer
应该做不到吧,pandas要么是overwrite要么是append,做不到填空吧。
一个方法是你把图片里的这个csv读取到pandas,比如说叫raw_df。
然后你再建一个list
input = ['王大娇', 0.450196, 1.889275, 1.889275, np.nan, np.nan]
再把值填到raw_df里
raw_df.loc[raw_df['人名'] == input[0]] = input[1:]
最后再输出raw_df到csv
Question 1003637: sklearn里怎么获得adaboost中每棵树的权重?
统计/机器学习 监督式学习 Pythonsklearn里怎么获得adaboost中每棵树的权重?
Answer
AdaBoostClassifier有estimator_weights_属性
clf = AdaBoostClassifier()
tree_weights = clf. estimator_weights_
tree_weights是一个长度为k的array,k就是这个adaboost分类器里树的个数
Question 1003667: python里的cdef是什么?
统计/机器学习 Pythonpython里的cdef是什么?和正常的def有区别么?
Answer
def 用来在Python中声明一个函数。cdef 在Cython的C语言层面声明了函数。
Question 1003670: 递归特征消除(RFE)方法可以用到生存分析数据上吗?
统计/机器学习 数据降维 特征选择 R Python现有一个高维的生存分析数据,想用RFE筛一下变量,目前看到的算法都是分类数据,生存数据怎么实现呢?
Answer
不知道你特指的是什么编程语言,看到你的问题标签里既有R也有Python。
如果是python的话,可以参考sklearn.feature_selection.RFE
如果是R的话,可以参考Variable Selection Using The caret in R
Question 1003691: python如何产生指定相关系数的多组数据
统计/机器学习 抽样方法 数据降维 描述性统计 Python每组数据40个 取值1-5 整数
可以指定组之间相关系数,最好可以同时指定均值 方差
想拿来验证一下问卷的因子分析
最好用python
Answer
整数比较难做,最好是用正态分布的,这样比较容易生成有相关性的两组正态数据
Question 1003719: 怎么利用python对时间序列中缺失值进行线性插值?
统计/机器学习 数据预处理 时间序列 Python时间序列应该是每天一个数值点,但是有时候会有缺失值
比如
2018-01-02 y=100
2018-01-04 y=120
这里1月3号的信息是缺失的,我希望是对这个缺失值进行线性填值,得到
2018-01-03 y=110
有时候,可能会连续缺失几天信息
比如
2018-01-02 y=100
2018-01-05 y=115
这样就需要填充两天
得到
2018-01-03 y=105
2018-01-04 y=110
python里如何方便地实现这个功能呢?
Answer
方法如下
import pandas as pd
d = pd.DataFrame()
d['date'] = ['2019-01-01', '2019-01-02', '2019-01-04',
'2019-01-07', '2019-01-09', '2019-01-11']
d['val'] = [10, 20, 30, 40, 50, 30]
d['date'] = pd.to_datetime(d['date'])
上面的代码可以生成一个dataframe,如下
下面我们需要生成一个辅助dataframe,包含从2019-01-01到2019-01-11的所有日期。然后再将helper和d join起来
helper = pd.DataFrame({'date': pd.date_range(d['date'].min(), d['date'].max())})
d = pd.merge(d, helper, on='date', how='outer').sort_values('date')
现在得到的d是
最后一步就是插值了,直接用interpolate方法,method选择linear,线性
d['val'] = d['val'].interpolate(method='linear')
插值完的d如下:
Question 1003721: 怎么生成一个填满逻辑真(True)的numpy array?
统计/机器学习 Python怎么生成一个填满逻辑真(True)的numpy array?
比如3行4列的一个array,里面每个元素都是True
Answer
用numpy.ones然后设置类型为布尔型
>>> import numpy as np
>>> true_array = np.ones([3, 4], dtype=bool)
结果显示
>>> true_array
array([[ True, True, True, True],
[ True, True, True, True],
[ True, True, True, True]], dtype=bool)
Question 1003748: pandas dataframe对行去重?
统计/机器学习 数据预处理 Python把重复的都去掉,只保留最后一个,比如有五行,第一行和第二行一样,第四行是不同的,第三行和第五行是一样的,那么就把第一行和第二行都去掉,第三行第五行也去掉,只保留第四行。有什么方法实现吗?
Answer
对行去重并且不保留重复
df = df.drop_duplicates(keep=False)
对行去重并且保留重复的第一个
df = df.drop_duplicates(keep='first')
对行去重并且保留重复的最后一个
df = df.drop_duplicates(keep='last')
Question 1003777: 怎么在jupyter notebook里查看python的版本?
统计/机器学习 Python怎么在jupyter notebook里查看python的版本?
我目前是python3,但是我想知道我用的是python3.5还是3.6。
Answer
import sys
print(sys.version)
Question 1003792: print里的"%.2f"是什么意思?
统计/机器学习 Pythonprint里的"%.2f"是什么意思?
Answer
"%.2f"显示保留两位小数的浮点数,类似地"%.3f"是保留3位小数
比如
a = 0.12345
print("%.3f"%a)
打印出来就是0.123
Question 1003815: matplotlib画图怎么确保横坐标和纵坐标的单位长度一致?
统计/机器学习 数据可视化 Pythonmatplotlib画图怎么确保横坐标和纵坐标的单位长度一致?下面的图里面单位1的长度在x轴和y轴明显不一样。
怎么设置参数才能让x轴和y轴的单位度量一样长呢
Answer
plt.axis('equal')
或者
plt.axis('scaled')
Question 1003841: numpy生成二维随机均匀分布?
统计/机器学习 概率分布 Python我想在[0, 10]x[0, 10]这个区域里生成随机的点,该怎么做?
Answer
import numpy as np
out = np.random.uniform([0, 10], [0, 10], [100, 2])
out是100个$[0,10]\times [0,10]$中的随机点
Question 1003851: sklearn分类模型中预测结果怎么调整概率的阈值
统计/机器学习 监督式学习 Python请问各位,在分类算法中,预测的结果,如果概率>50%为1,概率小于<50% 为0 ,请问在sklearn中,怎么调整这个阈值,具体的程序怎么写,谢谢!!
Answer
用predict_proba得到概率,然后对概率切一下。以LogisticRegression为例
clf = LogisticRegression()
clf.fit(trainX, ytrain)
pred_proba = clf.predict_proba(testX)[:, 1]
thres = 0.75
pred_label = pred_proba > thres
pred_proba是每个点为真的概率
假设阈值是0.75
pred_label里True就是概率大于0.75的
Question 1003866: pytorch里view(-1, 1)什么意思?
统计/机器学习 Python 人工神经网络pytorch里view(-1, 1)什么意思?
比如
output = output.view(-1, 1)
Answer
这个就是和numpy里的reshape是一样的
output = output.view(-1, 1)
output不改变数据,但是改变数据的形状,1是表示一列,最后得到的是一个列tensor
Question 1003880: 怎么对pandas dataframe的行按照权重进行抽样?
统计/机器学习 抽样方法 数据预处理 Python怎么对pandas dataframe的行按照某个权重进行有放回地抽样?
假设每行都有一个权重,权重大的行就更容易抽到,甚至多次被抽到,这个怎么实现呢?
Answer
假设你要你抽出nrows行,df中有一列weight表示你说的那个权重,下面的代码就可以实现你需要的功能
newdf = df.sample(n=nrwos, replace=True, weights=df['weight'])
Question 1003886: keras模型合并请教
统计/机器学习 深度学习 Python 人工神经网络 强化学习假如我有2台服务器A和B,我建立了一个相同结构的Sequential模型,同时在2个服务器上跑, 保存后得到了2个h5的文件,我是否能将这2个文件进行合并,得到一个新的结果,来提升成功率。
我是在看到了A3C的理念后,想到的,希望能在多台服务器进行学习,然后和主服务器通讯,更新结果,并获取新的模型数据,再进行下一轮学习。
在网上搜索了很久没有看到类似的情况,不知道是用model.updates还是model.add_update,或其他什么方法?是只更新权重还是包含优化器状态?
希望有人帮助得到解答,谢谢,祝大家新年快乐!
Answer
这些天我思考了一下,keras在fit的时候,应该也是进行了数据更新,可fit部分的代码确实没看懂。。。。
找到到一个类似的代码,如下:
updates = self.rms_optimizer.get_updates(self.model.trainable_weights, [], loss)
K.function([self.model.input, self.discounted_r], [], updates=updates)
这个是更新了loss,keras里面最重要的是权重还是loss?这2者的关系很困惑,fit学出来保存的好像是权重,loss呢。。。
之前的貌似被吞了,现在补上。。。
最简单的方法就是直接把结果合并,类似于stacking
每个服务器都训练出一个模型,每个模型的预测值的平均值就可以作为你合并之后的结果
或者也可以ensemble,把每个模型的输出值作为ensemble模型的输入值,再训练一个小模型
Question 1003906: sklearn可以用gpu加速吗?
统计/机器学习 Python感觉sklearn还是有点慢的,特别是gridsearch调参的时候。sklearn可以用gpu加速吗?
Answer
Sklearn本身不支持gpu。但有个变通方法,在tensorflow上运行sklearn,让TF去支持GPU运算。有个skflow,
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/learn/python/learn
可以试试。
sklearn不会包含GPU compiler, 而TF其实是像Matlab一样的计算平台,包含对操作系统和GPU compiler的支持。
Question 1003917: Anaconda安装wptools失败,提示找不到该包
统计/机器学习 Python我在Anaconda里安装wptools(一个wikipedia的API包)包提示找不到该包,如何处理?谢谢!
Answer
推荐试试Wikipedia-API,也是维基百科的api,使用起来很方便
pip install wikipedia-api
试试pip install wptools呢?
Question 1003935: python里@property有什么用
统计/机器学习 Pythonpython的class里出现的@property是什么意思?有什么用?
比如下面这个例子
class MyClass:
...
@property
def get_date(self):
return self._get_date
Answer
将类方法转换为只读属性
例如
class MyClass:
def __init__(self,a,b):
self.a = a
self.b = b
def a_add_b(self):
return self.a+self.b
In [13]:m=MyClass(1,2)
In [14]: m.a_add_b()
Out[14]: 3
In [16]: m.a_add_b
Out[16]: <bound method MyClass.a_add_b of <__main__.MyClass object at 0x000001795A776CC0>>
In [4]: m.a_add_b = 4
In [5]: m.a_add_b
Out[5]: 4
In [6]: m.a_add_b()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in ()
----> 1 m.a_add_b()
TypeError: 'int' object is not callable
class MyClass:
def __init__(self,a,b):
self.a = a
self.b = b
@property
def a_add_b(self):
return self.a+self.b
In [21]: m=MyClass(1,2)
In [22]: m.a_add_b
Out[22]: 3
In [23]: m.a_add_b=4
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
in ()
----> 1 m.a_add_b=4
AttributeError: can't set attribute
cabbage提到了只读,此外,property是一个装饰器,把一个method装饰成attribute。好处是什么呢,只有当该attribute被调用的时候,才会被计算。比如下面这个例子,
class Tester:
def __init__(self, a):
self._a = a
@property
def a(self):
return self._a
@property
def square(self):
return self.a ** 2
初始化
t = Tester(2)
print(t.square)
显示结果为4。所以定义的时候是个方法,调用的时候被装饰为属性。
Question 1003943: 怎么对pyspark dataframe里的空缺值填值?
统计/机器学习 数据预处理 Python怎么对pyspark dataframe里的空缺值填值?
pandas dataframe里有df=df.fillna(0),pyspark dataframe有没有类似的方法来填充NA或者missing?
Answer
pyspark也有fillna,用法和pandas类似。对三列填充0,如下
df = df.fillna(0.0, subset=['col1', 'col2', 'col3'])
也可以dict的方法让fillna对不同的列填充不同的值,如下
df = df.fillna({'col1': 1.0, 'col2': 2.0, 'col3': 3.0})
Question 1003970: 怎么对pyspark.sql.dataframe按照某一列降序排列?
统计/机器学习 Python怎么对pyspark.sql.dataframe按照某一列降序排列?在线等...谢谢
Answer
按照mycol这列从大到小排列
df = df.sort(F.col('mycol').desc())
按照mycol这列从小到大排列
df = df.sort(c('conversions').asc())
Question 1003984: 怎么用python批量生成含重复数值的数列?
统计/机器学习 PythonR里用rep很方便就可以生成类似于
[1, 1, 1, 2, 2, 2, 2, 5, 5, 5, 5, 5]
这样含有大量重复数值的数列。
python里面怎么实现?有没有类似的函数?
Answer
Question 1003992: 用np.round的时候报错AttributeError: no attribute 'rint'
统计/机器学习 Python我对一个numpy array做round进行四舍五入,然后一直出现
AttributeError: 'numpy.float64' object has no attribute 'rint'
这个情况有遇到过的么?是numpy出bug了么?
Answer
可能是array的dtype有问题,你先试着转成float,然后再round
a = a.astype(float)
a_round = np.round(a, 2)
Question 1004007: pandas报错: 'DataFrame' object has no attribute 'unique'
统计/机器学习 Python我想查看data中不重复的VehicleId,用unique方法调用
data[['VehicleId']].unique()
结果出现报错信息
AttributeError: 'DataFrame' object has no attribute 'unique'
请教各位,谢谢!
Answer
data[['VehicleId']]选出来的是一个DataFrame
data['VehicleId']选出来的是Series,你多了一对方括号
data['VehicleId'].unique()
Question 1004019: pandas同时返回一个dataframe的前几行(head)和后几行(tail)
统计/机器学习 Python对于一个pd.DataFrame,df.head(10)可以返回前10行,df.tail(10)可以返回最后10行。有没有什么方法能够合并head和tail的功能,同时返回前几行和后几行的?谢谢各位!
Answer
df.head(10).append(df.tail(10))
import numpy as np
df.iloc[np.r_[0:10, -10:0]]
Question 1004035: sklearn pca 数据降维结果不一致
统计/机器学习 数据降维 Python各位好,刚刚接触sklearn, 在使用pca对数据进行降维过程中遇到了一个问题。
a = np.random.rand(1000,1000)
pca = PCA(n_components= 200)
a_1 = pca.fit_transform(a)
a_2 = pca.fit_transform(a)
a_1[0][0] = -1.04953966
a_2[0][0] = -1.06709133
我做了两边,发现两个结果矩阵的数值不一样,希望大家能给我解答一下。
Answer
你需要设置random_state,比如
pca = PCA(n_components=200, random_state=999)
查sklearn手册,数据大于500x500,svd solver自动选randomized,得到随机的近似解。你可以选solver,或者用小点的数据。
Question 1004044: 怎么按照index对pd.DataFrame的行排序?
统计/机器学习 Python如题。按照某列对DataFrame排序的话,可以用sort_values('column'),但是对于index,没有这样的用法,该怎么解决呢?
Answer
和sort_values类似,有sort_index
df = df.sort_index()
Question 1004049: 怎么把一个pandas数据框用append的方式添加到现有的csv文件?
统计/机器学习 Python怎么把一个pandas数据框用append的方式添加到现有的csv文件?
Answer
就和正常的输出一样,只不过加上mode='a'和header=False
df.to_csv('the_data_file.csv', mode='a', header=False)
with open(filename, 'a') as f:
df.to_csv(f, mode='a', header=f.tell()==0)
如果文件不存在的话,就同时保存列名;如果文件存在,就只保存数据
Question 1004093: 怎么用python读取视频文件?
统计/机器学习 计算机视觉 Python I/O怎么用python读取视频文件?比如avi,mp4,mov之类的格式。谢谢!
Answer
用imageio这个package
import matplotlib.pyplot as plt
import imageio
imageio.plugins.ffmpeg.download()
# 读取视频,显示第100,200,300帧画面
vid = imageio.get_reader('vid.mp4', format='ffmpeg')
plt.figure(figsize=(7, 2))
for num in [1, 2, 3]:
image = vid.get_data(100 * num)
plt.subplot(1, 3, num)
plt.title('Img %d'%(100*num), fontsize=10)
plt.axis('off'); plt.imshow(image)
plt.show()
import cv2
cv2.VideoCapture()
Question 1004105: plt.scatter出现AttributeError: Unknown property markersize
统计/机器学习 数据可视化 Python我想用plt.scatter实现一个简单的散点图,同时我又想调整图中散点的大小。用了下面的代码
plt.scatter(x, y, markersize=15)
但是程序运行后出错了,原因是
AttributeError: Unknown property markersize
我之前用plt.plot(x, y, markersize=15, marker='o')是没有报错的,为什么在scatter里就报错了呢?
Answer
scatter里没有markersize,是s
plt.scatter(x, y, s=15)
Question 1004112: sklearn里zero_one_loss是什么?
统计/机器学习 Python 损失函数sklearn.metrics.zero_one_loss是什么?就是1-accuracy吗?
Answer
计算预测值和真实值不匹配的比例。有个参数normalize,默认是True,如果设置为False,就是计算不匹配的个数。
是的。这个loss就是1-accuracy
from sklearn.metrics import accuracy_score, zero_one_loss
accuracy_score(y_true, y_pred) == 1- zero_one_loss(y_true, y_pred)
Question 1004129: opencv里waitkey和destroyAllWindows有什么用?
统计/机器学习 计算机视觉 Python新人刚刚入坑opencv,感觉每个程序最后都以下面的方式结束的
cv2.waitKey(0)
cv2.destroyAllWindows()
请问这两行代码有什么用?
Answer
cv2.waitKey()是等待键盘的响应,0是代表一致等待,这还可以输入其他的数值,只不过是以毫秒为单位的
当你使用cv2.imshow()函数得时候,代码一直往下走到最后一行,直接结束代码。
cv2.waitKey()的主要作用是让你的程序不直接退出,等到你按下任何按键之后整个程序才退出。
这样子当你用cv2.imshow()的时候,你才能让你展示的图像保持着不会退出。
而cv2.destroyAllwindows()的主要作用是清除所有show出来的图像,当然你不做这一步的话,程序退出的时候会自动清楚。
Question 1004131: 如何将csv中多行变成一行
统计/机器学习 Python原始数据放到csv中变成了3行 如何通过pd.read_csv 将3行变成一行
Answer
不一定要在python中处理吧,你可以在sublime里处理,直接“查找替换”。
把 \n详细 换成 \t详细
把 \n2019- 换成 \t2019-
个人建议先写脚本处理一下:)
Question 1004132: 东方财富的数据怎么爬下来
统计/机器学习 Python如图的数据怎么爬 放入excel
Answer
web scraper
Question 1004139: pandas中某列中数字后边有 亿/万这种单位 如何处理
统计/机器学习 Python直接去掉数据就变了 怎么把它直接后边加几个0
Answer
#df['持股市值']=df['持股市值'].map(lambda x: float(x.strip('亿'))*10000 if(x.find('亿')) else float(x.strip('万')))
df['持股市值a']=df['持股市值'].map(lambda x: float(x.strip('亿'))*10000 if ('亿' in x) else float(x.strip('万')))
为啥下边一行ok 上边一行不行
差异 x.find('亿') vs '亿' in x
Question 1004144: matplotlib怎么画圆?
统计/机器学习 数据可视化 Python给定圆心和半径,matplotlib怎么画圆?
Answer
import matplotlib.pyplot as plt
plt.figure(figsize=(4, 4))
plt.axis('equal')
ax = plt.gca()
ax.set_xlim((-2, 2))
ax.set_ylim((-2, 2))
disk1 = plt.Circle((0, 0), 1, color='r', fill=False)
ax.add_artist(disk1)
plt.show()
Question 1004145: 怎么把字符串形式的list转成真的list
统计/机器学习 Python我有一个python操作的问题,比如有一个字符串'[1, 2, 3]',怎么转成list类型的[1, 2, 3]?
Answer
a = '[1, 2, 3]'
b = eval(a)
print(b)
有个包叫ast,可以把文字表述的list转成list
import ast
a = '[1, 2, [3, 4]]'
nums = ast.literal_eval(a)
Question 1004161: 怎么给plt.subplot加一个主标题?
统计/机器学习 数据可视化 Pythonplt.title()可以给每个subplot加一个副标题,比如下面的data1,data2,data3
我怎么给图的整体的上方加一个主标题或者说大标题?
Answer
有suptitle这个函数,专门生成总标题的
plt.figure()
plt.suptitle('Main titile', fontsize=14)
plt.subplot(1, 2, 1)
plt.title('subtitle1')
plt.subplot(1, 2, 2)
plt.title('subtitle2')
plt.show()
Question 1004167: pandas数据列顺序不同进行concat
统计/机器学习 Python如果一个数据列
A B C D
另外一个
D B C A
怎么使用concat join merge 弄到一块
弄成
A B C D
Answer
df = pd.concat([df1, df2[df1.columns])
Question 1004168: pandas数据合并 merge 相同的列能不能合并
统计/机器学习 Python比如体重和数学 两个表都有的能不能弄成一列
因为姓名要包含所有的 所以要用outer
能不能axis=0 outer axis=1 inner这种
Answer
result = pd.merge(df1, df2, on=['姓名', '数学', '体重'], how='outer')
补充@派大星的答案
如果不想把两个dataframe相同的列当作Join的Key的话,就Join之前从左表或者右边先删除重复的列(当然要留下一个Join Key)。
Question 1004171: sklearn里有哪些方法是可以处理不均衡的分类问题的?
统计/机器学习 监督式学习 开放问题 Pythonsklearn里有哪些方法是可以处理不均衡的分类问题的?比如采样和权重?
Answer
通过欠采样、过采样等方法来调整样本分布,可以参考imbalance包
调整样本权重,可以调整类似Logistic Regression中的class_weight参数来调整不同类别样本对损失函数影响的大小。
如有错误,欢迎指出。
sklearn只是工具,很多时候需要自己去完成一些步骤来处理非均衡问题。
比如欠采样、过采样,训练时候的权重,交叉验证的时候进行分层验证。
选用适合的损失函数和评价标准也是很重要的,比如用roc auc以及召回-精度曲线。
在选择train和test集合时,sklearn就已经考虑到了不均衡性,参见函数说明
https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html
stratify : array-like or None (default=None)
If not None, data is split in a stratified fashion, using this as the class labels.
Question 1004180: 怎么check dataframe 中的某个元素是否字符串?
统计/机器学习 Pythonrt
Answer
我是问每个元素类型是否 是字符串
找到答案了 谢谢
type(x)==str
Question 1004182: numpy.full这个函数有什么用?
统计/机器学习 Pythonnumpy.full这个函数什么用?
Answer
np.full(shape, fill_value)可以生成一个元素为fill_value,形状为shape的array。比如
>>> np.full([3, 4], 'a')
array([[2, 2, 2],
[2, 2, 2]])
当fill_value是数值的时候,np.full(shape, fill_value)和fill_value * np.ones(shape)是等价的。
但是当fill_value是字符串的时候,np.ones就无法做到这个效果了。比如
>>> np.full([2, 3], 'abc')
array([['abc', 'abc', 'abc'],
['abc', 'abc', 'abc']]]
Question 1004191: 怎么获得sklearn里决策树的实际深度?
统计/机器学习 监督式学习 Pythonsklearn里的决策树模型,DecisionTreeClassifier和DecisionTreeRegressor都可以设置最大深度max_depth。
我想知道在训练结束之后,怎么获得树的实际深度呢?
我觉得并不是每次训练树都能恰好达到最大深度,所以想看看实际深度。
Answer
tree = DecisionTreeClassifier(max_depth=100)
tree.fit(X, y)
print(tree.tree_.max_depth)
Question 1004195: pandas里有没有类似于sql里coalesce的函数来处理缺失值?
统计/机器学习 数据预处理 Python我想得到这样的一列数据,如果a列有数,就取a中的值,如果空缺,就取b列中的值。
效果类似于sql里的coalesce函数。这个功能在pandas里怎么实现?
Answer
df["a"].fillna(df["b"])
df['a'].combine_first(df['b'])
Question 1004198: python怎么去除字符串中的连字符?
统计/机器学习 Python比如这个字符串'12-a-b-c',其中有一些连字符-,python中怎么把这些连字符都去掉?
效果是'12-a-b-c'变成'12abc'
Answer
把'-'换成''就可以了
s = '1-2-3'
ss = s.replace('-', '')
Question 1004203: 一维数据怎么输入卷积网络。
统计/机器学习 Python 人工神经网络 TensorFlow有一组400个观测值 每个观测值都有20000个变量,相当于是一个20000*400的矩阵 怎么作为input输进cnn啊。想做一维卷积
Answer
可以将数据形状reshape,从(20000,400)变成(20000,1,400)
tensorflow里有conv1d的,官方链接tf.layers.conv1d
pytorch里也有一维的,conv1d,官方链接torch conv1d
Question 1004204: dataframe数据变long python有stata类似的命令吗
统计/机器学习 Python比如
id 2012 2013
a 1 2
b 3 4
变成
id year
a 2012 1
a 2013 2
b 2012 3
b 2013 4
Answer
pandas里的stack有类似的效果
df = pd.DataFrame()
df[2012] = [1, 3]
df[2013] = [2, 4]
df.index = ['a', 'b']
columns = [('year', 2012), ('year', 2013)]
df.columns = pd.MultiIndex.from_tuples(columns)
df.stack().reset_index()
Question 1004207: ipykernel_launcher.py 未响应,jupyter, gym强化学习
统计/机器学习 Python 强化学习anaconda 安装 gym,运行测试程序,为啥ipykernel_launcher.py 未响应一直未响应?
gym直接安装在anaconda root里,没有创建虚拟环境,因为单独创建虚拟环境,在jupyter上运行程序总是会出现no module named。。。 tensorflow也是这样
Answer
我没有出现过这个问题,感觉是ipykernal的问题,你可以升级试试
pip install --upgrade ipykernel
Question 1004210: 问一下roc和logistic回归有啥联系区别
统计/机器学习 Python如果我有y 二分类变量 x连续变量或者等级变量
可以做回归 得到y x之间的方程,然后通过x来预测y
如果roc 同样的数据
roctab y x (stata)
roccomp y x1 x2 比较两种方法的哪个更好
但是在这种情况下 是不是相当于比较logistic y x1 和logistic y x2 两者的优劣 有没有办法比较logistic y x1 x2 和logistic y x1 之间的优劣
不知道上述理解是否正确
Answer
logit是逻辑回归的link function。
roc是逻辑回归的评价标准。
不是一回事。
btw logit主要目的是用来预测 比如是否阳性
roc主要来评判各种指标x1 x2之间优劣
这么理解对吗
Question 1004217: sklearn回归的入门级问题
统计/机器学习 回归分析 Python>>> from sklearn import linear_model
>>> reg=linear_model.LinearRegression()
>>> reg.fit([[0],[1],[2]],[4,6,10])
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,
normalize=False)
>>> reg.coef_
array([3.])
我想象的是用线性回归模拟y=2x+4,但实际结果是3,请问这给的只是wx+b的w吗
Answer
reg.fit([[0],[1],[2]],[4,6,10])
为什么会是$y=2x+4$?如果是$[0,1,2]$,$[4,6,8]$的话,那么斜率应该是2。
你的数据集的话,斜率是$(6-4)/(1-0)=2$和$(10-6)/(2-1)=4$的均值,应该就是3。
没事了,我知道了coef_是权重
intercept_是偏置
如果最终模型是y=2x+4
reg.coef_应该是2
reg.intercept_应该是4
Question 1004228: sklearn里有没有计算rmse的函数?
统计/机器学习 模型验证 Python 损失函数sklearn里有没有直接计算rmse的函数?
Answer
sklearn里没有计算RMSE的,但是有计算MSE的。你把MSE开根就可以得到RMSE了。
from sklearn.metrics import mean_squared_error
import numpy as np
def rmse(y_true, y_pred):
return np.sqrt(mean_squared_error(y_true, y_pred))
Question 1004232: 求sklearn.pipeline.Pipeline使用的例子
统计/机器学习 Pythonsklearn.pipeline.Pipeline怎么用?求一个简单的例子。谢谢各位!
Answer
SofaSofa里这两个标杆模型都用到了pipeline,建议看看。
Question 1004242: 怎么获得当前jupyter notebook的token(密码)?
统计/机器学习 Python求助:怎么获得当前jupyter notebook的token(密码)?
Answer
你在jupyter notebook里打下面这段
system("jupyter" "notebook" "list")
然后会出现类似于
['Currently running servers:',
'http://localhost:8888/?token=9651c0fe159b0b82592747ef836dbce85c513f644a668ca9 :: /nfs/home/J/Juser']
Question 1004256: pandas按照两列sort_values,一个升序一个降序
统计/机器学习 Python比如我有一个dataframe有'a','b','c'三列,怎么把dataframe按照'a'升序同时'b'降序重新排列?
Answer
df = df.sort_values(by=['a', 'b'], ascending=[True, False])
Question 1004296: python __del__ 求解释
统计/机器学习 Python>>> class C:
def __init__(self):
print("我是__init__")
def __del__(self):
print("我是__del__")
>>> c1 = C()
我是__init__
>>> c2=c1
>>> del c2
>>> del c1
我是__del__
>>> c3=C()
我是__init__
>>> c3
<__main__.c at="" object="">
>>> c4=c3
>>> del c4
>>> del c3
>>> c5=C()
我是__init__
>>> c5
我是__del__
<__main__.c at="" object="">
Answer
官方文档说了(这里),所以别用__del__,估计是历史遗留问题,所以在python的新版本里还留着。
用del删除变量,不代表.__del__被调用了。
只要C类object被删除,就会触发__del__(self)。
你的代码里面del c2,并没有触发,因为c2只是指向了c1,而不是一个真正的object。而删除c1的时候触发了__del__(self),所以print生效。
你后面的代码在我电脑上并没有实现出来。我的结果如下:
我再给你一个例子
class C:
def __init__(self):
print("here __init__")
def __del__(self):
print("here __del__")
def Test(val):
a = C()
return val
x = Test(3)
在Test函数中,a被创建,因为是临时变量而且没有被return,所以函数调用之后,a就被自动消灭了。
所以你看的结果应该是
here __init__
here __del__
def __init__(self):
定义了一个对象被创建后的行为
def __del__(self):
定义了一个对象被销毁后的行为
Question 1004307: 随机森林警告:A column-vector y was passed when a 1d array was expected
统计/机器学习 监督式学习 Pythonpython里随机森林的代码
from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor()
model.fit(data.drop('y', axis=1), data[['y']])
但是出现了warning
A column-vector y was passed when a 1d array was expected
这个会影响预测结果吗?这个该怎么解决呢?
Answer
这个warning应该不影响结果。你改成下面这样应该就没问题了
model.fit(data.drop('y', axis=1), data['y'])
或者
model.fit(data.drop('y', axis=1), data[['y']].values.flatten())
Question 1004318: numpy array怎么保存成文件?
统计/机器学习 Python I/O二维的numpy array怎么保存成文件,比如txt或者csv都可以
Answer
import numpy
a = numpy.asarray([ [1,2,3], [4,5,6], [7,8,9] ])
numpy.savetxt("foo.csv", a, delimiter=",")
来自:https://stackoverflow.com/questions/6081008/dump-a-numpy-array-into-a-csv-file
Question 1004323: 嵌套dictionary类型数据转成pandas dataframe的问题
统计/机器学习 数据预处理 Python我有一个嵌套的dictionary
{"2018":{"1月":数据, "2月":数据, "3月":...},
"2017":{"1月":数据, "2月":数据, "3月":...},
"2016":{"1月":数据, "2月":数据, "3月":...},
...}
怎么把它转成pandas的dataframe,index是年份,列名是月份?
Answer
from_dict是用来转dict到df的
my_df = pd.DataFrame.from_dict(my_dict, orient='index')
>>> import pandas as pd
>>> d={"2018":{"1月":1, "2月":2, "3月":3},
"2017":{"1月":4, "2月":5, "3月":6},
"2016":{"1月":7, "2月":8, "3月":9}}
>>> df=pd.DataFrame(d)
>>> df
2018 2017 2016
1月 1 4 7
2月 2 5 8
3月 3 6 9
>>> df.T
1月 2月 3月
2018 1 2 3
2017 4 5 6
2016 7 8 9
Question 1004334: plt.imshow显示的黑白图片颜色很奇怪
统计/机器学习 计算机视觉 数据可视化 Python我加载的是MNIST数据,按道理是黑白的手写数字,结果显示出来是彩色的
plt.imshow(train_images[0])
plt.show()
请问该怎么调整?
Answer
设置一下cmap
plt.imshow(train_images[0], cmap='binary')
或者
plt.imshow(train_images[0], cmap='Greys_r')
或者
plt.imshow(train_images[0], cmap='Greys')
Question 1004342: python中怎么把HEX颜色和RGB颜色相互转换?
统计/机器学习 计算机视觉 数据可视化 PythonHEX颜色是string类型,比如'#fffbbb',我想把它转成RGB颜色,list或者numpy array类型,比如(255, 251, 187)。
怎么实现呢?谢谢~
Answer
hex_color ='#cecece'
rgb_color = tuple(int(hex_color[i:i+2], 16) for i in (1, 3, 5))
里面的int(str, 16)就是把16进制的数转换成10进制的。
Question 1004347: plt.scatter画多个散点图,在legend中显示图例大小却不一样
统计/机器学习 数据可视化 Python各位好!我用matplotlib库中的scatter函数画了如下散点图。但是在右边的legend中,图例里面两种散点的三角形的示意大小却不一样,type1明显比type2大了。怎么调节才能使得它们在legend中一样大呢?
我的代码是
plt.scatter(x1, y1, s=p1_size, label='type1', marker='^')
plt.scatter(x2, y2, s=p2_size, label='type2', marker='^')
plt.legend(bbox_to_anchor=(1.2, 1), fontsize=14)
plt.show()
谢谢各位指导!
Answer
把plt.legend那行换成下面这段
my_leg = plt.legend(bbox_to_anchor=(1.2, 1), fontsize=14)
my_leg.legendHandles[0]._sizes = [100]
my_leg.legendHandles[1]._sizes = [100]
Question 1004368: 怎么随机打乱一个numpy array?
统计/机器学习 Python请问怎么随机打乱一个numpy array?
Answer
from sklearn.utils import shuffle
arr = shuffle(arr)
>>> import numpy as np
>>> a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> np.random.shuffle(a)
>>> print(a)
[[7 8 9]
[4 5 6]
[1 2 3]]
不过要注意np.random.shuffle是inplace的
问题不是很清楚,什么叫做打乱一个numpy矩阵?能举个例子吗?
Question 1004385: python如何判断某路径下是否存在指定的csv文件?
统计/机器学习 Python在用pandas读取csv文件前,如何判断在指定路径下的某个csv文件是否存在呢?
Answer
提供另外一种不用try的方法
import os
flag = os.path.isfile('path_to_file/data.csv')
if flag:
print('file exists')
可以用try的方法吧
try:
data = pd.read_csv('path/file.csv')
except:
print('not found')
Question 1004390: python中怎么判断某一年是闰年?
统计/机器学习 时间序列 Pythonpython中怎么判断某一年是闰年?
Answer
python有built-in的calendar
import calendar
calendar.isleap(2016)
如果年份末尾两个零,除以400;不然除以4,能被整除就是闰年。
def is_leap(year):
return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
Question 1004396: python如何把list中的item作为变量的后缀 从而产生for中的动态变量名
统计/机器学习 Python如果lista=['a', 'b', 'c']
for i in lista :
var1
产生的var1 的名字是 vara varb varc这种
Answer
lista=['a', 'b', 'c']
for v in lista:
locals()["var"+v] = 1
感觉做不到这个,建议你用dict。
variables = dict()
for v in ['a', 'b', 'c']:
variables['var%s'%v] = None
Question 1004410: python中休眠
统计/机器学习 Python怎么在python中让程序休眠一段时间,比如
执行代码1
休眠10秒
执行代码2
Answer
from time import sleep
sleep(10)
Question 1004414: python matplotlib画图中怎么显示latex数学公式?
统计/机器学习 数据可视化 Pythonpython matplotlib画图中怎么显示latex数学公式?
Answer
直接在字符串里加单美元符号就可以了
plt.title('$y=\sin (x^2)$')
x = np.linspace(-2, 2, 100)
plt.plot(x, np.sin(x ** 2))
plt.show()
效果可参考下图的标题
Question 1004420: 对tuple的元素赋值时报错:'tuple' object does not support item assignment
统计/机器学习 Python对tuple的元素赋值时报错:
t[0] = 0
TypeError: 'tuple' object does not support item assignment
那应该如何修改tuple里的值呢?
Answer
tuple是只读的,不能对内部的元素进行重新赋值。
建议用list。list和tuple几乎完全一样,主要区别就是list可读可写。
Question 1004424: python怎么生成截断正态分布变量?
统计/机器学习 概率分布 Pythonpython怎么生成截断正态分布变量?
Answer
scipy里有截断正态。下界和上界可以自定义。例子里是$(-2, 2)$
from scipy.stats import truncnorm
a = truncnorm.rvs(-2, 2, loc=0, scale=1, size=10000)
tensorflow里也有。上下界不能自定义,范围标准差的4倍
import tensorflow as tf
a = tf.truncated_normal(shape=[10000], mean=0.0, stddev=1.0)
Question 1004425: 怎么把numpy array中的inf换成0?
统计/机器学习 数据预处理 Python上一步的计算让array中产生了Inf,怎么一次性把arry中所有的Inf替换成0?
Answer
假设把a中的inf替换成0
a[np.isinf(a)] = 0
如果是有-inf
a[np.isneginf(a)] = 0
Question 1004427: 有个一万段文字 有一个关键词列表 找出文字中含有关键词的那些文字
统计/机器学习 自然语言处理 Python关键词有100个词
如果用python for去循环的话 for 10000*100 感觉效率不高
有没有高效方法
比如 文字段
她早前在广发信用卡做销售,后来做服装生意,一个人独住在珠江骏景中区(16年6月卖燕郊换北京,市值600,已二抵,残值约150)。但最近几个月常驻广东,回京时间无法判断,逮不着
(黄色段是某一段 ,共10000段)
关键词
社会 程序 指针 ....
Answer
从时间复杂度上来说,好像只能跑10000*100个循环了
Question 1004431: sklearn r2_score返回负数
统计/机器学习 回归分析 模型验证 Python用了sklearn里自带的r2_score来检验回归的效果
from sklearn.metrics import r2_score
结果返回了一个负数,这个什么情况,出bug了么?
Answer
不是bug,是你的预测结果不大好导致的。$R^2$并没有平方的意思,是可以是负数的。
题主可以参考之前一样的问题:回归问题中R方可以是负数?
Question 1004461: python中怎么对list中元素进行有放回抽样?
统计/机器学习 抽样方法 Pythonpython中怎么对list中元素进行有放回抽样?
Answer
numpy.random.choice
import numpy as np
a = ['u', 'v', 'w', 'x', 'y', 'z']
# 有放回抽样
sample_wt = np.random.choice(a, 5, replace=True)
print(sample_wt)
# 无放回抽样
sample_wo = np.random.choice(a, 5, replace=False)
print(sample_wo)
Question 1004469: keras里的predict,predict_classes,predict_proba有什么区别?
统计/机器学习 Python 人工神经网络keras里的predict,predict_classes,predict_proba有什么区别?
Answer
keras里的predict_proba是和sklearn里的predict_proba完全一样的,输出的是每一类的概率
keras的predict_classes是相当于sklearn的predict,也就是返回预测的分类
keras中predict和predict_proba等价的
分类问题用predict_classes,predict_proba。前者返回标签,后者返回概率。
回归问题用predict,返回数值。
Question 1004474: matplotlib plt.hist画直方图,怎么改变直方之间分界线的颜色?
统计/机器学习 数据可视化 Python我用了matplotlib pyplot的hist画直方图,如下图
现在每个直方柱之间的分界线是黑色,不是太明显,请问怎么把这个颜色改成白色?谢谢!
Answer
在plt.hist里定义一下参数edgecolor,如果觉得直方柱体的分界线不够粗,可以调整linewidth
plt.hist(data, bins=10, edgecolor='white', linewidth=1)
Question 1004475: 随机森林的模型一般都很大么?
统计/机器学习 监督式学习 Python就是10w条+特征数据max_depth=30,n_estimators=500
跑出来了800M大小模型,load都慢。。。
Answer
你这个森林深度有点大啊,如果你把深度调小点,效果应该差不多。
另外你保存的时候,设置一下compress参数应该会减小很多空间
from sklearn.externals import joblib
joblib.dump(my_rf_model, "rf.pkl", compress=9)
#my_rf_model是你训练好的模型
compress的值是0到9之间,越大表示压缩程度越高。
随机森林一般深度不要超过10,不然每棵树过拟合严重,而且就会有你遇到的问题,模型太大,不管是调用还是存储都是问题。
我觉得模型选择上挺好的,随机森林固有的两类随机性可以很好的处理特征较多的情况,但是深度有些大了,过拟合有很大的概率会出现,可读性也不会太好。
Question 1004513: 怎么在jupyter notebook设置全局的随机种子?
统计/机器学习 Python我的实验里有好几个步骤涉及到随机,有的是numpy,有的是在sklearn模型里。
怎么在jupyter notebook设置全局的随机种子?
这样的话我每次运行整个notebook能够得到一致的结果。谢谢!
Answer
在第一个cell里打
import numpy as np
np.random.seed(100)
后面的cell应该都是用这个seed,但是不能重复运行一个cell,不然就会有问题
Question 1004525: keras加载imdb数据时num_words参数是干嘛的?
统计/机器学习 自然语言处理 Python 人工神经网络 TensorFlow在网上看keras上的教程,其中一个是加载keras自带的imdb电影数据库
imdb.load_data里有个参数num_words,这个是什么意思?
from keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
Answer
num_words=10000的意思是训练集中我们指保留词频最高的前10000个单词。10000名之后的词汇都会被直接忽略,不出现在train_data和test_data中。
Question 1004549: keras里layer默认的激活函数是什么?
统计/机器学习 Python 人工神经网络 TensorFlowkeras里layer默认的激活函数是什么?下面这个代码里就没有指明activation是什么。
model.add(layers.Dense(1))
Answer
默认的就是线性激活函数,就相当于是identiy,所以你上面的代码
model.add.(layers.Dense(1, activation='linear'))
Question 1004552: 能直接把csv格式的数据文件读到numpy array里吗?
统计/机器学习 Python I/O能直接把csv格式的文件读到numpy array里吗?
我现在是先读取csv到pandas的,但是pandas的dataframe太占内存了,所以我想直接读取到numpy array。
谢谢各位!
Answer
import numpy as np
my_data = np.genfromtxt('data.csv', delimiter=',')
Question 1004561: pandas返回组内某列值最大的行?
统计/机器学习 数据预处理 Python比如一个dataframe有很多列,包括'id', 'date', 'location', 'sales', 'amount', 'type'
我想返回每天sales最大的那一行。我现在做的是
df.groupby(['date'], as_index=False).agg({'sales': max})
但是这个只能返回date和sales,没有id, location, amount, type这类信息。
这么能得到每天sales最大的完整的行?
Answer
只用groupby和agg估计做不到。我觉得你可以对date和sales排序,然后对date去重,只保留每个date的最后一行也就是sales最大的一行
df.sort_values(['date', 'sales']).drop_duplicates(['date'], keep='last')
Question 1004568: python里怎么计算两个向量的余弦相似?
统计/机器学习 描述性统计 Pythonpython里怎么计算两个向量的余弦相似?
Answer
你可以用sklearn里现成的
from sklearn.metrics.pairwise import cosine_similarity
cosine_similarity(x, y)
或者你也可以用numpy手算
x = np.array([1, 2, 3])
y = np.array([2, 0, 1])
(x @ y.T) / (np.sqrt(np.sum(x ** 2)) * np.sqrt(np.sum(y ** 2)))
Question 1004574: keras怎么设置/改动rmsprop的学习率?
统计/机器学习 深度学习 Python 人工神经网络keras里训练前要compile一下并且设置优化算法,比如用rmsprop算法就是下面这样
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
我的问题是我怎么在keras里设置或者改动默认的学习率?
Answer
from keras import optimizers
rms = optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=None, decay=0.0)
model.compile(optimizer=rms,
loss='categorical_crossentropy',
metrics=['accuracy'])
修改lr即可
Question 1004577: 求多个torch tensor的平均值
统计/机器学习 Python我有一串torch tensor,shape都是一样的,假设都是5x3的,我怎么对它们求均值呢?就是各个位置的均值,最后得到的还是一个5x3的torch tensor。
假设我有四个tensor,t1, t2, t3, t4。我进行下面的操作
torch.mean([t1, t2, t3, t4], 0)
结果报错
TypeError: mean() received an invalid combination of arguments - got (list, int), but expected one of:
* (Tensor input)
* (Tensor input, torch.dtype dtype)
didn't match because some of the arguments have invalid types: (list, int)
* (Tensor input, int dim, torch.dtype dtype, Tensor out)
* (Tensor input, int dim, bool keepdim, torch.dtype dtype, Tensor out)
* (Tensor input, int dim, bool keepdim, Tensor out)
Answer
需要stack之后再mean
torch.mean(torch.stack([t1, t2, t3, t4]), 0)
Question 1004583: 怎么在pyspark里把dataframe写入csv文件?
统计/机器学习 Python怎么在pyspark里把dataframe写入csv文件?
Answer
df.write.csv('mycsv.csv')
楼上这样写会把文件写到hdfs上,如果数据量小的话,可以考虑df.toPandas().to_csv('mycsv.csv')直接拿到本地,数据大的话就算了。
Question 1004584: 怎么对pandas dataframe的行进行有放回抽样?
统计/机器学习 抽样方法 Python比如一个pandas dataframe有n行,怎么对这n行进行有放回抽样,取出m行组成新的dataframe?
Answer
df.sample(m, replace=True)
有放回地抽100行
m = 100
ind = np.random.choice(df.index, m, replace=True)
new_df = df.loc[ind]
Question 1004595: sklearn.cluster.KMeans的fit_transform方法的返回值是什么意义?
统计/机器学习 无监督学习 Python调用sklearn里的kmeans的fit_transform方法
kmeans = KMeans()
kmeans.fit_transform(data)
得到了一个有8列的array,这个array是什么意思?
Answer
fit_transform和transform的返回值是一样的,返回的array的每一行是每一个样本到kmeans中各个中心点的$L_2$距离。行数就是样本的个数。
你说的8列,是因为sklearn.cluster.KMeans默认是分成8个cluster。
Question 1004598: print(__doc__)有什么用?
统计/机器学习 Pythonpython文件开头的print(__doc__)有什么用?求解答
Answer
# --------1--------
"""----2-----"""
"""-----3-----"""
def x():
"""-----4-----"""
return "------5------"
"""-----6-----"""
print(__doc__)
print(x.__doc__)
print(__doc__)是查看说明文档的,说明文档一般是"""xxxx"""来进行编辑的。会输出----2----,因为一个py文件中只能有一个说明文档,所以只会打印第一个。
print(x.__doc__)是查看x这个函数的说明文档,同理会打印----4-----.
Question 1004603: sklearn中除了sgd以外,还有什么可以使用partial_fit方法吗?
统计/机器学习 Python在别的问题里看到的,我也比较好奇,所以单独提问了。
sklearn中除了sgd以外,还有什么可以使用partial_fit方法吗?
Answer
很多啊,只要是增量学习的算法都有partial_fit。
分类算法
- sklearn.naive_bayes.MultinomialNB
- sklearn.naive_bayes.BernoulliNB
- sklearn.linear_model.Perceptron
- sklearn.linear_model.SGDClassifier
- sklearn.linear_model.PassiveAggressiveClassifier
回归算法
- sklearn.linear_model.SGDRegressor
- sklearn.linear_model.PassiveAggressiveRegressor
无监督
- sklearn.cluster.MiniBatchKMeans
- sklearn.decomposition.MiniBatchDictionaryLearning
Question 1004606: pandas.DataFrame里at, iat, loc, iloc区别
统计/机器学习 Pythonpandas.DataFrame里at, iat, loc, iloc区别是什么?才入门感觉不是很好理解啊
Answer
loc是利用index和列名进行检索,iloc是利用位置来检索(比如第几行、第几列)
at类似于loc,但是更快,缺点是只能对一行一列进行检索;iat类似iloc,但是更快,确定是只能对一行一列进行检索。
-----------------
下面df这个例子
用loc提取df中index=1,列='a'的数值;也可以用loc提取多个数值,比如index=[1, 11],列=['a', 'b']
iloc提取df中的第0行和第0列(python是从0开始计数的);提取df中的第0和第2行以及第0和第1列
at每次只能提取一行和一列,比如index=1和列='a';iat是针对位置,比如第0行第0列
Question 1004614: 怎么对pandas dataframe做转置?
统计/机器学习 Python怎么对pandas dataframe做转置?转完之后列名变成index,index变成列名。
Answer
和numpy array的转置一样的,加个.T就可以了
Question 1004624: 怎么对有多个空格的字符串进行split?
统计/机器学习 Python比如'a b c',我想得到的是['a', 'b', 'c'],但是用split.(' ')得到有空字符
>>> 'a b c'.split(' ')
['a', 'b', '', '', 'c']
如果我想对有多个空格的字符串进行split并且忽略多个连在一起的空格,该怎么做?不知道我描述的清楚不清楚,谢谢大家。
Answer
'a b c'.split(),注意split()括号里面默认即可
import re
re.split(r'\s+', 'a b c')
Question 1004627: 图像轮廓识别
统计/机器学习 计算机视觉 Python像这种图像,如何识别完整轮廓并在内容填充颜色(注意轮廓是不连续的)
网上找的代码但是完全不明白,而且他把图像的外边缘也识别了,如何去掉
import cv2
img = cv2.imread(r'aaa/1/1.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(img, contours, -1, (0, 255, 0), 1)
cv2.imshow("img", img)
cv2.waitKey(0)
Answer
你再读取一个同样大小的空白图片,然后提取空白图片的轮框。你再用上图的轮框减掉空白图片的轮廓,就可以得到你要的了吧
Question 1004634: 如何用matplotlib在3D空间呈现x^2+y^2?
统计/机器学习 数据可视化 Python如何在3D空间呈现x^2+y^2
Answer
你可以用颜色表示$f(x,y)$,比如下面的图
代码:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3, 3, 101)
y = np.linspace(-3, 3, 101)
z = np.array([i*i+j*j for j in y for i in x])
X, Y = np.meshgrid(x, y)
Z = z.reshape(101, 101)
plt.figure(figsize=(5, 5))
plt.axis('equal')
plt.contourf(X, Y, Z, 50, cmap='RdYlGn_r')
plt.colorbar()
plt.show()
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(-2, 2, 0.1)
Y = np.arange(-2, 2, 0.1)
X, Y = np.meshgrid(X, Y)
Z = X ** 2 + Y ** 2
ax.plot_surface(X, Y, Z, cmap=plt.cm.winter)
plt.show()
Question 1004650: 用uci的crimes做了一个线性回归,test很差
统计/机器学习 回归分析 Pythonimport numpy as np
import pandas as pd
import os
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
# Read the data
#crimesDF =pd.read_csv("crimes.csv",encoding="ISO-8859-1")
crimesDF =pd.read_csv("communities.csv",encoding="ISO-8859-1")
#Remove the 1st 7 columns
print(crimesDF.shape[1]) #128
crimesDF1=crimesDF.iloc[:,6:crimesDF.shape[1]]
# Convert to numeric
crimesDF2 = crimesDF1.apply(pd.to_numeric, errors='coerce')
# Impute NA to 0s
crimesDF2.fillna(0, inplace=True)
# Select the X (feature vatiables - all)
X=crimesDF2.iloc[:,0:120]
# Set the target
y=crimesDF2.iloc[:,121]
print(y)
X_train, X_test, y_train, y_test = train_test_split(X, y,random_state = 0)
# Fit a multivariate regression model
linreg = LinearRegression().fit(X_train, y_train)
# compute and print the R Square
print('R-squared score (training): {:.3f}'.format(linreg.score(X_train, y_train)))
print('R-squared score (test): {:.3f}'.format(linreg.score(X_test, y_test)))
## R-squared score (training): 0.78
## R-squared score (test): 0.03
test的score只有0.03 不知道是什么原因呢
Answer
看样子像过拟合了,应该是你变量太多,有多重线性相关了。
你换个random forest试试,再用cv调一下参
Question 1004657: %%timeit结果解释
统计/机器学习 数据预处理 开放问题 Pythonjupyter notebook
python3
在测一个功能的实现效率,得到这么几个结果:
123 ms ± 8.32 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
59.2 ms ± 4.05 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
52.4 ns ± 0.256 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
47.4 ns ± 0.105 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
哪个耗时最短(效率最高)?
为什么?
Answer
最下面那个最快吧,47.4 ns x 10000000 < 52.4 ns x 10000000 < 59.2 ms x 10 < 123 ms x 10
Question 1004659: sklearn模型当中的verbose是什么意思?
统计/机器学习 Pythonsklearn模型当中的verbose是什么意思?
一般怎么设置verbose等于几?
Answer
verbose是控制日志输出的, 'controls the verbosity: the higher, the more messages'
verbose = 0没有输出;verbose = 1 简化版日志输出;verbose=2 更细致的日志输出...
一般设置到2就很多信息了,日志输出太多会影响运行的速度。
参考链接:https://stackoverflow.com/questions/29995249/verbose-argument-in-scikit-learn
verbose用来控制在训练过程中返回信息的详细程度。verbose=0就是训练时不返回任何信息,verbose=1训练时返回一些信息,verbose=2返回训练步骤的详细信息。
Question 1004676: sklearn中的Randomizedlogisticregression是什么算法?和SGDClassifier一样吗?
统计/机器学习 监督式学习 Pythonsklearn中的Randomizedlogisticregression是什么算法?和SGDClassifier一样吗?
Answer
新版的sklearn里的确没有RandomizedLogisticRegression。
但是这个算法的思想本身还是有点意思。
首先对训练集进行bootstrap,然后随机设定一个L1 penalty,拟合一个逻辑回归,当然最终只有一些特征的系数不为0。
多次重复以上步骤,一个特征非零次数越多,说明它越重要。
这个不重要了。新版本的sklearn里已经把RandomizedLogisticRegression删掉了。
Question 1004677: python画散点图的时候如何在右侧显示光谱?
统计/机器学习 数据可视化 Pythonpython画散点图的时候,颜色表示了数值的大小。类似于下面这个例子,但是我的图没有显示右侧的这个光谱,如何让它显示出来?
上面这个图右侧就有光谱,我要怎么显示?初来乍到,谢谢各位!
Answer
plt.scatter(x=range(20), y=range(20), c=range(20), cmap='RdYlGn')
plt.colorbar() #添加光谱柱
plt.show()
效果如下:
Question 1005281: plt.subplot怎么设置才能每行图的个数不一样?
统计/机器学习 数据可视化 Pythonplt.subplot(m, n, i)是画出m乘n个子图,每行都是n个图。
请问怎么设置才能使得每行图不一样多?
比如第一行4个图,第二行两个一样长的长图,第三行又是4个图。
Answer
用GridSpec可以实现这个功能,下面就是你要的这种情况
import matplotlib.pyplot as plt
import numpy as np
# 初始化x和y
x = np.linspace(-5, 5, 100)
y = np.sin(x)
# 生成格子,2行4列
grid = plt.GridSpec(2, 4, wspace=0.4, hspace=0.3)
# 第一行的图,每图占一列
plt.subplot(grid[0, 0])
plt.plot(x, y)
plt.subplot(grid[0, 1])
plt.plot(x, y)
plt.subplot(grid[0, 2])
plt.plot(x, y)
plt.subplot(grid[0, 3])
plt.plot(x, y)
# 第二行的图,每图占两列
plt.subplot(grid[1, :2])
plt.plot(x, y)
plt.subplot(grid[1, 2:])
plt.plot(x, y)
plt.show()
效果如下:
Question 1005282: re 不能在list 或者dataframe查找?
统计/机器学习 Python有没有在dataframe/list
中找keywords的方法呢 ,这个keywords可能只是dataframe/list的一部分
Answer
pandas的series或者dataframe有contain这个功能,应该就是题主要的
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.contains.html
Question 1005283: 有nonetype的list怎么转str
统计/机器学习 Pythonstri=" ".join(i)
TypeError: sequence item 0: expected str instance, NoneType found
Answer
NoneType不能直接进行join
你可以自动跳过None
" ".join([x for x in i if x is not None])
或者把None替换成“空”
" ".join(["空" if x is None else x for x in i])
Question 1005301: 有一个1000万行的dataframe
统计/机器学习 Pythondf只有一列a
从第一行开始a的每10行相加放到a的后边形成suma
第一个suma =sum(df.a[0:9])
第2个suma =sum(df.a[1:10])
用最笨的方法计算 大概3个小时
有没有高效的方法呢
Answer
pandas里有rolling,可以求移动和以及移动均值的。
df['a'].rolling(window=10).sum()
你可以插入一个辅助列叫flag,第0-9行flag=0,10-19行flag=1,20-29行flag=2.
df['flag'] = np.arange(len(df)) // 10
然后以flag为key对a列进行groupby求和就可以了
df.groupby('flag', as_index=False).agg({'a': 'sum'})
可以换用numpy操作,应该能快一些
Question 1005418: 怎么得到randomforestregressor里每棵树的预测结果?
统计/机器学习 监督式学习 Python我在sklearn里用了30棵树的randomforestregressor,按照原理来说,我应该得到了30个单独的数值预测结果。怎么获得随机森林中每棵树的预测结果呢?
Answer
estimators_[k]可以得到第k棵树
model = RandomForestRegressor(n_estimators=3)
model.fit(X, Y)
tree0, tree1, tree2 = model.estimators_[0], model.estimators_[1], model.estimators_[2]
pred0 = tree0.predict(X)
pred1 = tree1.predict(X)
pred2 = tree2.predict(X)
Question 1005423: pd.cut怎么用?
统计/机器学习 Pythonpandas里pd.cut怎么用?
Answer
官网上介绍的比较清楚了,并且在下面还有例子。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.cut.html?highlight=cut#pandas.cut
简单的一句话pandas的cut可以把一组数据分割成离散的区间。
import numpy as np
import pandas as pd
pd.cut(np.array([1, 7, 5, 4, 6, 3]), 3)
#output:
#[(0.994, 3.0], (5.0, 7.0], (3.0, 5.0], (3.0, 5.0], (5.0, 7.0], (0.994, 3.0]]
#返回的是每个元素所在的区间
pd.cut可以方便将连续数值离散化。
下面的例子就是利用pd.cut将成绩分数转成等第。
def score2grade(score):
grade = pd.cut(score, [0, 60, 70, 80, 90, np.inf], right=False, labels=['F', 'D', 'C', 'B', 'A'])
return grade
比如
score2grade([45, 65, 70, 92])
就会得到['F', 'D', 'C', 'A']
Question 1005426: 分类问题 特征怎么选择
统计/机器学习 监督式学习 特征选择 Python回归可以用类似lasso的方法
那分类问题怎么选择特征呢 ,看哪个特征贡献大
Answer
logistic regression也可以用L1正则项,类似于回归中的lasso。
此外也可以用random forest或者xgboost,它们会返回特征的重要性,也相当于是特征选择。
Question 1005445: gensim word2vec中wmdistance是什么距离?
统计/机器学习 自然语言处理 描述性统计 Pythongensim word2vec中wmdistance是什么距离?
Answer
WMD(Word Mover Distance)
计算两个文档之间的移动距离
详细计算可以看这里
参考文献:
- Ofir Pele and Michael Werman, "A linear time histogram metric for improved SIFT matching".
- Ofir Pele and Michael Werman, "Fast and robust earth mover's distances".
- Matt Kusner et al. "From Word Embeddings To Document Distances".
Question 1005449: 怎样选择合适的算法?比如这个天气预报数据预测电力故障
统计/机器学习 监督式学习 模型验证 时间序列 Python新手请教各位前辈。项目是用图1的「天气预报」的数据去预测「电力故障的数量」。
1. 总的来说是一个「回归」问题,什么类型的算法预测效果会比较好呢?
2. target还挺不平衡的(如图2),2/3都是零,非零也主要集中在0-1之间,有延伸至30左右的long tail。这种情况下选模型和调参有什么需要注意的地方吗?
Answer
参考一下这个问题怎么处理真值大部分为0的回归问题。
上面那个问题中kykix回答的可能比较适合你
1)先用所有样本做一个逻辑回归
2)然后对非零样本取log
3)再对log后的非零样本做回归
4)最后再把结果综合起来
Question 1005461: 如何获取pyspark DataFrame的行数和列数?
统计/机器学习 Python在pandas里可以直接用df.shape(),但是pyspark的dataframe不支持shape。有没有类似的代码能够返回pyspark dataframe的行数和列数的?
Answer
print((df.count(), len(df.columns)))
Question 1005527: keras里sparse_categorical_crossentropy和categorical_crossentropy什么不同?
统计/机器学习 Python 损失函数 TensorFlowkeras里sparse_categorical_crossentropy和categorical_crossentropy什么不同?两个可以混着用吗?
Answer
都是计算多分类crossentropy的,只是对y的格式要求不同。
1)如果是categorical_crossentropy,那y必须是one-hot处理过的
2)如果是sparse_categorical_crossentropy,那y就是原始的整数形式,比如[1, 0, 2, 0, 2]这种
Question 1005542: 怎么获得numpy array每行最小值的index?
统计/机器学习 Python如下一个array
[[0, 1, 5],
[2, 3, 1],
[1, 4, 2]]
第一行最小的是0,index是0;第二行最小的是1,index是2;第三行最小的是1,index=0。
上面这个array每行最小值分别为[0, 2, 0]。
请问有什么方法可以像如上获取numpy array每行最小值的index?
Answer
>>> a = np.arange(6).reshape(2,3) + 10
>>> a
array([[10, 11, 12],
[13, 14, 15]])
>>> np.argmin(a)
0
>>> np.argmin(a, axis=0)
array([0, 0, 0])
>>> np.argmin(a, axis=1)
array([0, 0])
Question 1005562: 怎么提取pandas dataframe中某一列每个字符串的前n个字符?
统计/机器学习 Python
上面这样的dataframe,如果我像提取key这一列中每行的前4个字符,该如何实现?
提取完之后,就类似于['ABKD', 'BCZD', 'FKGB', 'KJLD']
Answer
df['key'].apply(lambda x:x[:4]).tolist()
Question 1005573: 怎么在python中获取昨天的日期的字符串?
统计/机器学习 时间序列 Python假如系统今天是2019年9月1号,怎么获取昨天的日期并转成字符串形式,比如‘20190831’。
Answer
from datetime import datetime, timedelta
yesterday = (datetime.now() - timedelta(1)).strftime('%Y%m%d')
Question 1005595: pandas dataframe存入csv文件时怎么忽略dataframe中的index?
统计/机器学习 Python I/Opandas dataframe存入csv文件时会把index也存入文件中,请问怎么避免把dataframe中的index也保存进去?
Answer
df.to_csv(path,index=False)
用to_csv()写入时参数index=False即可。
Question 1005632: sklearn无法加载kfold
统计/机器学习 模型验证 Python在sklearn中加载kfold
from sklearn.model_selection import Kfold
然后得到错误
ImportError: cannot import name 'Kfold'
求助!谢谢!
Answer
f应该是大写吧
from sklearn.model_selection import KFold
我这边试了没问题
Question 1005641: 为什么Keras和Pytorch都是把模型保存成h5的格式而不是pkl格式?
统计/机器学习 Python TensorFlow I/O为什么Keras和Pytorch都是把模型保存成h5的格式而不是pkl格式?有特别的原因吗?
Answer
不建议把神经网络模型或者数据集存成pkl格式,因为太占用空间了。h5更小。
在h5中100mb的模型,存到pkl里要300mb以上。
可以保存为pkl格式的,你可以在Pytorch中这样试试:
#保留全部的神经网络
torch.save(net1 ,'net.pkl') # net1 是你要保存的网络
net2 = torch.load('.//pkl//net.pkl') # 加载你的网络
#只保留神经网络的参数
torch.save(net1.state_dict(), 'net_params.pkl' )
# 用参数还原神经网络 !!首先我们必须创造一个和原来具有一样结构的神经网络
net2 = torch.load('.//pkl//net.pkl')
http://sofasofa.io/tutorials/pytorch_tutorials/ 这里有一篇Pytorch的简单教程
Question 1005648: 获取seaborn color_palette里每个颜色的rgb数值?
统计/机器学习 数据可视化 Pythonseaborn里提供了很多默认的颜色库,比如
import seaborn as sns
sns.set_palette("husl")
husl里有好几种颜色,我怎么可以获取每个颜色的rgb数值呢?
Answer
显示RGB数值
sns.color_palette("husl")
[(0.9677975592919913, 0.44127456009157356, 0.5358103155058701),
(0.7350228985632719, 0.5952719904750953, 0.1944419133847522),
(0.3126890019504329, 0.6928754610296064, 0.1923704830330379),
(0.21044753832183283, 0.6773105080456748, 0.6433941168468681),
(0.23299120924703914, 0.639586552066035, 0.9260706093977744),
(0.9082572436765556, 0.40195790729656516, 0.9576909250290225)]
显示颜色盘
sns.palplot(sns.color_palette("husl"))
Question 1005649: numpy array中元素的个数?
统计/机器学习 Pythonarray可能是1维的向量,可能是2维的矩阵,也可能是高维的张量,用a.shape只能得到每一维的个数,怎么可以得到array中元素的总个数呢?
Answer
使用a.size,就可以了
a.size
或者
np.prod(a.shape)
Question 1005658: python字符串形式的数值转成单个整数的list,怎么操作?
统计/机器学习 Python我想要把字符串形式的数值转成单个整数的list,比如下面这个例子
'215' -> [2, 1, 5]
在python中该怎么操作?
Answer
list(map(int, "123"))
s = '123'
digits = [int(x) for x in s]
Question 1005665: sklearn里的RandomForestClassifier和ExtraTreesClassifier有什么区别吗?
统计/机器学习 监督式学习 Pythonsklearn里的RandomForestClassifier和ExtraTreesClassifier有什么区别吗?
Answer
参考黄前志在Extra Tree算法是什么?的回答。
复制一下:
ExtRa Trees是Extremely Randomized Trees的缩写,意思就是极度随机树。这是一种组合方法,与其说像决策树,实际上它更像随机森林。
与随机森林的相同点:1. bootstrap了样本。2. 随机选取了部分特征,来构造一个棵树。 我们知道随机森林是由很多个随机的决策树组成的,extra trees比随机森林更随机。
与随机森林的不同点:每棵决策树选择划分点的方式不同。对于普通决策树,每个特征都是根据某个标准(信息增益或者gini不纯)去进行划分,比如说一个数值特征的取值范围是0到100,当我们把这个特征划分为0-45,45-100的时候,效果最佳(从信息增益或者gini不纯的角度),决策树就会将45作为划分点;然后再按照某个标准来选择特征。而对于extra trees中的决策树,划分点的选择更为随机,比如一个数值特征的取值范围是0到100,我们随机选择一个0到100的数值作为划分点;然后再按照评判标准选择一个特征。
Question 1005666: 怎么利用pandas新建一个只有列名的空的dataframe?
统计/机器学习 Python新手请教各位,怎么利用pandas新建一个只有列名的空的dataframe?如果列名分别是A,B,C。
Answer
import pandas as pd
df = pd.DataFrame(columns=['a','b','c','d'])
Question 1005678: sparkml里的word2vec是基于哪种模型的?
统计/机器学习 自然语言处理 Pythonword2vec有两种模型,一个是cbow,一个是skip-gram,sparkml里自带的word2vec用的是哪一种啊?
Answer
Question 1005681: keras无法加载imdb文本:Object arrays cannot be loaded when allow_pickle=False
统计/机器学习 自然语言处理 Python TensorFlow按照网上的教程加载imdb电影评论数据集
from keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
结果直接报错了
ValueError: Object arrays cannot be loaded when allow_pickle=False
求助各位!谢谢!
Answer
我试了一下,好像是numpy版本的问题,numpy1.17的版本和keras没有完全兼容。
你在上面的代码上加上下面这段
import numpy as np
old = np.load
np.load = lambda *a,**k: old(*a,**k,allow_pickle=True)
然后再加载数据集
from keras.datasets import imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
Question 1005684: Python Pandas loc切片问题
统计/机器学习 数据预处理 Python有一个如上图的dataframe,我想只选择第一行和第三行,我采用如下的方式报错,请问下是为什么呢?
采用loc的方式:
df.loc['2013-01-01', '2013-01-03']
报错提示:
Answer
要看Date是index还是column,你可以试试下面这两个
df.loc[['2013-01-01', '2013-01-03']]
或者
df.loc[df['Date'].isin(['2013-01-01', '2013-01-03'])]
中括号得是两个
df.loc[['2013-01-01', '2013-01-03']]
如果不对是不是数据类型的问题,试试这个
df.loc[pd.to_datetime(x) for x in ['2013-01-01','2013-01-03']]
Question 1005692: 如何清空pandas dataframe里的全部数据但是保留列名?
统计/机器学习 Python如何清空pandas dataframe里的全部数值,但是保持原有的列名?
Answer
df = df.iloc[0:0].copy()
df.drop(df.index, inplace=True)
df_1 = df.drop(range(len(df)),axis=0)
Question 1005707: pandas groupby返回组内排序
统计/机器学习 数据预处理 Python一个dataframe,其中三列,一列是'name',一列是'type',一列是'value',type是类型,我想返回每个type的value的排序,请问怎么操作?
Answer
df.groupby('type', as_index=False)['value'].rank()
df.groupby('type').apply(lambda x:x.sort_values(by = 'value'))
Question 1005746: print的时候报错:TypeError: unsupported operand type(s) for /: 'str' and 'int'
统计/机器学习 Pythonpython里用print的时候报错
seconds = 100
print('Total time: %.1f minutes'%seconds/60)
完全不明白为什么出错了,错误信息是
TypeError: unsupported operand type(s) for /: 'str' and 'int'
Answer
你上面报错信息是说你用字符串和整数做了除法,自然就报错了。
你在seconds/60的周围少了一对括号,应该是
print('Total time: %.1f minutes'%(seconds/60))
Question 1005765: 怎么删除pandas dataframe中index重复的行?
统计/机器学习 Python怎么删除pandas dataframe中index重复的行?某一列里有重复可以用drop_duplicates,index有重复该怎么去重?
Answer
df_new = df.loc[~df.index.duplicated(keep='first')].copy()
Question 1005766: keras和tensorflow有什么关系?
统计/机器学习 深度学习 Python 人工神经网络 TensorFlow我理解的是它们两个是python中不同的神经网络的package,但是我import keras之后,屏幕上会跳出
Using tensorflow backend
那么它们两是同一个package吗难道?
Answer
tensorflow是比较底层,keras是tensorflow的接口,更便于使用。与其说是两个不同package,不如说keras是基于tensorflow的package。
keras适用于快速建立模型,但是如果需要很多个性化设置和更灵活的调整,可以使用keras的底层package,也就是tensorflow。
貌似是在Theano和tensoflow上面封装的
keras允许简单而快速的原型设计、用户友好,高度模块化,可扩展性、简单易学。30分钟上手。
keras的底层是tensorflow,以tensorflow为后端。Tensorflow更灵活,模块自定义程度更高,所以上手和原型设计没有keras快。
Question 1005777: 怎么把pandas dataframe中一列英文文本全部转成小写?
统计/机器学习 Python我现在遇到一个问题,我的dataframe中有一列,姑且叫做'demo',这一列的内容都是英文字符串,其中有大写也有小写。我要怎么把大写全部转为小写呢?
Answer
一行代码就搞定
my_df['demo'] = my_df['demo'].str.lower()
这个问题跟pandas有什么关系。。lowercase算常识叭Σ( ° △ °|||)︴
Question 1005788: 为什么我用随机森林模型每次的score都不同 差异很大
统计/机器学习 回归分析 模型验证 Python随机森林模型 回归 ,
import numpy as np
import pandas as pd
from sklearn.neighbors import KNeighborsRegressor
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
data =pd.read_excel("data.xlsx","Sheet1")
data= data.dropna()
X=data.iloc[:,3:7]
y=data.iloc[:,10]
X_train, X_test, y_train, y_test=train_test_split(X,y,test_size=0.3)
rfr = RandomForestRegressor(n_estimators=20, max_features='auto',random_state=0)
#rfr.fit(X_train,y_train)
kf = KFold(n_splits=5, shuffle=True)
score_ndarray = cross_val_score(rfr, X, y, cv=kf)
print(score_ndarray)
400多个样本;
这个是5次的结果
[ 0.220815 0.6115134 -0.72378707 0.51356938 0.36471651]
Answer
你每次R方都不同,估计是因为你的模型很不稳健,与过拟合有关。你可以增加n_estimators,同时还需要设置最大深度,因为你的特征只有4个,max_depth设置为4就够了应该。
此外,cross_val_score默认的scoring是R方,你可以换成其他的试试,比如rmse
score_ndarray = cross_val_score(rfr, X, y, cv=kf, scoring='neg_mean_squared_error')
或者mae
score_ndarray = cross_val_score(rfr, X, y, cv=kf, scoring='neg_mean_absolute_error')
随机森林本来也是具有随机性的,所有每个fold结果相差很正常。如果你增加树的数量,应该每个fold的结果会相近一些。如果你数据量不够大的话,建议把fold数少一些,比如3fold。
Question 1005796: python(matplotlib)中如何把折线图和柱状图画在一起?
统计/机器学习 数据可视化 Pythonpython(matplotlib)中如何把折线图和柱状图画在一起,达到如下这种效果?谢谢!
Answer
代码如下
import numpy as np
import matplotlib.pyplot as plt
#构造数据
N = 10
ind = np.arange(N)
bars = np.random.randn(N)
t = np.arange(0.01, 10.0, 0.01)
#新建左侧纵坐标画板
fig, ax1 = plt.subplots()
#画柱状图
ax1.bar(ind, bars, alpha=0.3)
ax1.set_xlabel('$x$')
#显示左侧纵坐标
ax1.set_ylabel('bar', color='b')
[tl.set_color('b') for tl in ax1.get_yticklabels()]
#新建右侧纵坐标画板
ax2 = ax1.twinx()
#画曲线
ax2.plot(t, np.sin(0.25*np.pi*t), 'r-')
#显示右侧纵坐标
ax2.set_ylabel('sin', color='r')
[tl.set_color('r') for tl in ax2.get_yticklabels()]
plt.show()
Question 1005805: pandas里怎么把有multiindex的列拉平变成一层?
统计/机器学习 Python上面这个dataframe的columns是multiindex的,打印列名
df.columns
得到
MultiIndex(levels=[['value', 'date', 'id'], ['max', 'min', '']],
codes=[[2, 1, 0, 0], [2, 2, 0, 1]])
我想得到扁平化的列明,比如上面最后就只有四列,分别是
['id', 'date', 'value_max', 'value_min']
求助各位, 谢谢~
Answer
df.columns = ['_'.join(col).rstrip('_') for col in df.columns.values]
新的列明就是['id', 'date', 'value_max', 'value_min']
Question 1005813: python 时间格式问题
统计/机器学习 Python各位大佬好:
有一列日期格式显示为:,请问这种格式如和在python内转为这种形式呢?
Answer
%b表示三个字母的月份,%y表示两个数字的年份,%Y表示四个数字的年份,%m表示两个数字的月份,%d表示两个数字的日期
from datetime import datetime
def date_convert(date_str):
return datetime.strptime(date_str,'%b-%y').strftime('%Y-%m-%d')
上面的函数的运行结果
date_convert('Jan-85')
'1985-01-01'
date_convert('Nov-80')
'1980-11-01'
Question 1005818: 怎么利用python实现配对t检验?
统计/机器学习 假设检验 Python怎么利用python实现配对t检验?需要返回p值。
Answer
>>> from scipy.stats import ttest_rel
>>> ttest_rel(x, y)
Ttest_relResult(statistic=2.5211822699, pvalue=0.0135627853176)
Question 1005824: 问一下R里随机森林种ntree mtry对应python的参数
统计/机器学习 监督式学习 R Pythonntree是不是sklearn的n_estimators?
mtry是max_features还是max_depth?
Answer
ntree是python sklearn里的n_estimators
mtry是python sklearn里的max_features
R里没有最大深度这个参数
Question 1005830: 怎么在matplotlib的图中加入箭头标志注释?
统计/机器学习 数据可视化 Python怎么在matplotlib的图中加入箭头标志注释?如下图的这种
Answer
用plt.annotate可以表示箭头标注,参考文档。小例子如下:
import matplotlib.pyplot as plt
plt.plot([-1, 0, 1], [1, 0, 1])
plt.annotate('Local min',
xy=(0, 0),
xycoords='data',
xytext=(0.7, 0.2),
textcoords='axes fraction',
arrowprops=dict(arrowstyle="->"))
plt.show()
Question 1005834: CatBoostClassifier里的rsm参量是什么意思?
统计/机器学习 监督式学习 PythonCatBoostClassifier里的rsm参量是什么意思?
Answer
和xgboost sklearn api里的colsample_bytree是一个意思,意思是每次分裂时候选特征的比例,所以是一个(0, 1]之间的数
如果是1,表示所有特征都被考虑,如果是0.5,表示随机挑选一半特征,然后从中择优进行分裂
rsm = ratio of sample,随机放入模型的数据量的比例。0.8就是随机选80%的数据放入模型。
Question 1005835: 怎么对pandas dataframe中的值进行查找替换?
统计/机器学习 Pythondataframe中所有等于100的数值,需要被替换成1000,该怎么进行这样的查找替换?
Answer
df = df.replace(100, 1000)
df.replace(100, 1000, inplace=True)
Question 1005843: pyspark中怎么对dataframe里的行按照列去重?
统计/机器学习 Pythonpyspark中怎么对dataframe里的行按照列去重?有没有类似于pandas里drop_duplicates这样的函数?
Answer
spark_df = spark_df.dropDuplicates(cols)
cols是list of column names
Question 1005856: python dataframe中有一列的内容很长,在jupyter里没有办法完全显示,怎么办?
统计/机器学习 Pythonpython dataframe中有一列的内容很长,在jupyter里没有办法完全显示,怎么办?
下图就是一列的内容没有显示完整,被省略号取代了
Answer
设置max_colwidth每个列的最大宽度,如果取值是-1,那就是无限大。
import pandas as pd
pd.set_option('display.max_colwidth', -1)
Question 1005860: 怎么把本地的png图片读入numpy array里?
统计/机器学习 计算机视觉 Python I/O怎么把本地的png图片读入numpy array里?谢谢!
Answer
用keras就很方便啊,图像格式不重要,png,jpg都是一样的读取
>>> from keras.preprocessing.image import load_img, img_to_array
>>> img_array = img_to_array(load_img('my_img.png'))
import imageio
arr = imageio.imread('figure.png')
Question 1005886: python里计算加权的相关系数?
统计/机器学习 描述性统计 Python我知道numpy里有计算正常的相关系数的函数,请问如果是加权的相关系数怎么计算?
比如我在pandas的dataframe里有三列,一列x,一列y,还有一列是w,表示每行的权重,我怎么计算基于权重w的x和y的相关系数?
Answer
可以使用statsmodels.stats.weightstats.DescrStatsW模块
from statsmodels.stats import weightstats
stats_summary = weightstats.DescrStatsW(df[['x', 'y']], weights=df['w'])
print(stats_summary.corrcoef[0, 1]
stats_summary.corrcoef是一个2乘2的对称矩阵,对角线是1,其他位置的元素就是加权的相关系数
numpy的实现版本如下
import numpy as np
def cov(x, y, w):
"""Weighted Covariance"""
return np.average((x - m(x, w)) * (y - m(y, w)), weights=w)
def corr(x, y, w):
"""Weighted Correlation"""
return cov(x, y, w) / np.sqrt(cov(x, x, w) * cov(y, y, w))
Question 1005889: pandas的groupby报错:ValueError: Length of values does not match length of index
统计/机器学习 Python感觉是发现了pandas的bug,同样的dataframe,对一列groupby的什么没问题,同时对两列groupby的时候就报错了
#不会报错
data.groupby('key1', as_index=False).agg({'y': 'mean'})
#不会报错
data.groupby('key2', as_index=False).agg({'y': 'mean'})
#报错 ValueError: Length of values does not match length of index
data.groupby(['key1', 'key2'], as_index=False).agg({'y': 'mean'})
摸不着头脑,不知道是什么问题
Answer
试试
data.groupby(['key1', 'key2']).agg({'y': 'mean'}).reset_index()
我以前也遇到过这个问题,后来就是这么解决的,不知道对你有没有帮助
Question 1005918: pyplot的散点图怎么画空心的点?
统计/机器学习 数据可视化 Pythonpyplot的散点图怎么画空心的点,就是每个点的中间是白色,只有外围一圈是有颜色的?谢谢各位!
Answer
如果是空心的话,应该设置facecolors='none',其实就是相当于是透明的
plt.scatter(data[:, 0], data[:, 1], facecolors='none', edgecolors='r')
如果中间是白色的话,就设置成facecolors='white'
效果如下
Question 1005919: 怎么用python生成一个二维码,扫码跳转到一个指定的网页?
统计/机器学习 PythonRT.
怎么用python生成一个二维码,扫码跳转到一个指定的网页?
Answer
装一个qr的package,然后就很方便了
import qrcode
# 生成二维码实例,设置大小和边框
qr = qrcode.QRCode(box_size=10, border=2)
# 添加二维码的显示信息
content = "http://baidu.com"
qr.add_data(content)
qr.make(fit=True)
img = qr.make_image()
# 保存二维码
img.save("my_qrcode.jpg")
Question 1005921: sklearn,numpy里有没有计算ndcg的函数?
统计/机器学习 推荐系统 模型验证 Pythonsklearn,numpy里有没有计算ndcg的函数?
Answer
sklearn里并没有,需要自己实现的,kaggle上有人写过,链接在这里
代码在这里
import numpy as np
from sklearn.preprocessing import LabelBinarizer
from sklearn.metrics import make_scorer
def dcg_score(y_true, y_score, k=5):
"""Discounted cumulative gain (DCG) at rank K.
Parameters
----------
y_true : array, shape = [n_samples]
Ground truth (true relevance labels).
y_score : array, shape = [n_samples, n_classes]
Predicted scores.
k : int
Rank.
Returns
-------
score : float
"""
order = np.argsort(y_score)[::-1]
y_true = np.take(y_true, order[:k])
gain = 2 ** y_true - 1
discounts = np.log2(np.arange(len(y_true)) + 2)
return np.sum(gain / discounts)
def ndcg_score(ground_truth, predictions, k=5):
"""Normalized discounted cumulative gain (NDCG) at rank K.
Normalized Discounted Cumulative Gain (NDCG) measures the performance of a
recommendation system based on the graded relevance of the recommended
entities. It varies from 0.0 to 1.0, with 1.0 representing the ideal
ranking of the entities.
Parameters
----------
ground_truth : array, shape = [n_samples]
Ground truth (true labels represended as integers).
predictions : array, shape = [n_samples, n_classes]
Predicted probabilities.
k : int
Rank.
Returns
-------
score : float
Example
-------
>>> ground_truth = [1, 0, 2]
>>> predictions = [[0.15, 0.55, 0.2], [0.7, 0.2, 0.1], [0.06, 0.04, 0.9]]
>>> score = ndcg_score(ground_truth, predictions, k=2)
1.0
>>> predictions = [[0.9, 0.5, 0.8], [0.7, 0.2, 0.1], [0.06, 0.04, 0.9]]
>>> score = ndcg_score(ground_truth, predictions, k=2)
0.6666666666
"""
lb = LabelBinarizer()
lb.fit(range(len(predictions) + 1))
T = lb.transform(ground_truth)
scores = []
# Iterate over each y_true and compute the DCG score
for y_true, y_score in zip(T, predictions):
actual = dcg_score(y_true, y_score, k)
best = dcg_score(y_true, y_true, k)
score = float(actual) / float(best)
scores.append(score)
return np.mean(scores)
# NDCG Scorer function
ndcg_scorer = make_scorer(ndcg_score, needs_proba=True, k=5)
Question 1005944: 怎么在python获取系统的当前日期和时间?
统计/机器学习 Python怎么在python获取系统的当前日期和时间?
Answer
import datetime
print(datetime.datetime.now())
Question 1005966: 怎么把3D的numpy array显示为彩色图像并且保存?
统计/机器学习 计算机视觉 数据可视化 Python I/O怎么把3D的numpy array显示为彩色图像并且保存?
Answer
这里用matplotlib库实现,默认数据是numpy array,RGB通道排列的三维数据
from matplotlib import pyplot as plt
plt.imshow(data)
# 这里默认是RGB通道排列,即(R,G,B),如果是其他通道表述可以通过data.transpose来调整
plt.savefig("./1.jpg")
使用pillow库的Image.fromarray,你的3D的numpy array我理解图片是RGB的
下面我给了代码和示例图片
from PIL import Image
import numpy as np
if __name__ == '__main__':
org_img = Image.open('vacant.jpg')
org_pix = np.array(org_img)
print(org_pix.shape) # (32, 32, 3)
img = Image.fromarray(org_pix.astype('uint8')).convert('RGB')
img.save('111.jpg')
keras里面的一些函数也可以用保存图片
from keras.preprocessing import image
my_img = image.array_to_img(my_array)
my_img.save('output.jpg')
my_img.show()
Question 1005972: 统计pandas数据框一个列字符串中每个字符串出现的次数?
统计/机器学习 Pythonpandas的数据框中有一列都是字符串类型的,我想统计每一个字符串出现的次数
比如
id type
0 'a'
1 'b'
2 'a'
统计下来就是'a'出现了两次,'b'出现了一次。
这个怎么做呢?
Answer
df.type.value_counts()
df['type']value_counts()
上面的结果返回一个series
或者
from collections import Counter
Counter(df['type'])
上面的结果返回一个dictionary
Question 1005975: python中怎么描绘召回-精度曲线?
统计/机器学习 监督式学习 模型验证 数据可视化 Python我在sklearn中训练好一个二元分类模型,得到预测概率p,对比真实01值y,我怎么可以描绘召回-精度曲线?
Answer
from sklearn.metrics import precision_recall_curve
import matplotlib.pyplot as plt
precision, recall, _ = precision_recall_curve(y_true, y_prediction)
plt.plot(recall, precision)
plt.title('Precision-Recall curve')
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.show()
Question 1005979: sklearn.model_selection.cross_val_predict怎么固定random_state?
统计/机器学习 模型验证 Python在cross_val_predict里试了一下直接用random_state,结果报错
TypeError: cross_val_predict() got an unexpected keyword argument 'random_state'
Answer
不能直接设定random_state,可以通过cv参数设定,cv设置成kfold,kfold中再设定random_state
from sklearn.model_selection import KFold, cross_val_predict
seed = 100
kfold = KFold(n_splits=4, random_state=seed)
cv_pred = cross_val_score(model, X, y, cv=kfold)
Question 1005980: seaborn.distplot直方图的y轴的数值是什么意思?
统计/机器学习 概率分布 数据可视化 Python用seaborn.distplot画直方图的效果如下
纵坐标的数值是什么意思?感觉不像是占比,不然每个柱子的高度加起来就大于1了。
Answer
y轴不是比重,而是概率密度。
每个柱子的面积代表概率,而不是高度。
高度乘以宽度,得到面积(也就是概率);面积的和是等于1。
Question 1005981: gensim的word2vec模型是skip-gram还是cbow?
统计/机器学习 自然语言处理 Pythongensim的word2vec模型是skip-gram还是cbow?怎么使用skip-gram作为模型进行训练?
Answer
默认的设置是CBOW,如你设置word2vec的模型参数sg=1
gensim.models.word2vec.Word2Vec(sentences, sg=1)
那么就是用的skip-gram
Question 1005995: sklearn的cosine_similarity余弦相似怎么用?
统计/机器学习 推荐系统 描述性统计 Python我想计算两个向量的余弦相似,代码如下
from sklearn.metrics.pairwise import cosine_similarity
cosine_similarity([1, 2], [2, 1])
结果出错,错误信息如下
ValueError: Expected 2D array, got 1D array instead:
array=[1. 2.].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
怎么试都不行,头大了
Answer
输入的两个变量需要是2维的array,而不是向量,这样就可以了
cosine_similarity(np.array([[1, 2]]), np.array([[2, 1]]))
Question 1006025: gensim里word2vec的window指的是什么?包括的范围是多大?
统计/机器学习 自然语言处理 Pythongensim里word2vec的window指的是什么?包括的范围是多大?
比如下面这句话
The quick brown fox jumps over the lazy dog
如果我设置window是3,那么我的每个样本的长度是不是就是3,比如
[the, quick, brown],已知the brown预测quick
[quick, brown, fox],已知quick fox预测brown
是这么理解的吗?
Answer
window是指两端到中心词的距离,你上面的例子window=1
window=2,就是x, x, center, x, x
window=4,就是x, x, x, x, center, x, x, x, x
Question 1006030: fbprophet.Prophet里的growth='linear'和growth='logistic'有什么区别?
统计/机器学习 时间序列 Python我用fbprophet.Prophet做时间序列模型,里面其中有个参数叫growth,有两个选项一个是growth='linear'另一个是growth='logistic',它们两个有什么区别?一般选哪个?
Answer
linear就是普通的线性增长模式,logistic是一种存在上下限的模式,类似下面Logistic曲线
具体选择要看你预测模型的业务背景,如果是做一些类似市场份额的预测,因为存在着总量天花板(比如因为人口、环境的限制,不可能一直快速增长,总会到达一个饱和点),可以选择logistic;一般情况下都是使用linear,prophet默认应该也是选择的linear。
Question 1006042: 使用pandas.to_datetime转化文本到时间戳时怎么只保留日期?
统计/机器学习 Pythonpandas.to_datetime转化文本到时间时,默认选项是既有日期也有具体的时刻,即使文本中没有几点几分的信息
>>> pd.to_datetime('2019-11-11')
Timestamp('2019-11-11 00:00:00')
怎么只保留日期?
Answer
pd.to_datetime('2019-11-11').date() ?
如果你是转换一个日期
x = '2019-01-01'
x_dates = pd.to_datetime(x).date()
如果你是转换dataframe中的一列
x = pd.DataFrame()
x['date'] = ['2019-01-01', '2018-01-01']
x_dates = pd.to_datetime(x['date']).dt.date
Question 1006049: matplotlib作图的x轴上的名称怎么旋转?
统计/机器学习 数据可视化 Python我用了xticks显示自定义的x轴,但是由于文本长,所以有重叠遮挡,怎么对x轴上的文字旋转,使它们错开?
Answer
xticks里可以设置rotation参数,输入值是数值时就是逆时针旋转的角度
plt.plot(range(5), range(5))
plt.xticks(range(5), ['AAAAAA', 'BBBBBB', 'CCCCCC', 'DDDDDD', 'EEEEEE'], rotation=45)
plt.show()
逆时针旋转45度
设置rotation='vertical',就是逆时针旋转90度
Question 1006051: 怎么得到sklearn里的RandomForestClassifier训练好之后每棵树的叶节点的个数?
统计/机器学习 监督式学习 Pythonsklearn里的RandomForestClassifier训练好之后每棵树的结构都不大一样,比如叶节点的个数很可能不同。
怎么获得随机森林中每棵树的叶节点的个数?
Answer
如果sklearn的版本在0.21以上的话,下面的代码可以直接用
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators =5)
clf.fit(x, y)
num_leaves_each_tree = [tree.get_n_leaves() for tree in clf.estimators_]
Question 1006055: 同一批样本数据,利用sklearn中二项逻辑回归预测同一批预测数据的概率,每次预测结果有很大不同
统计/机器学习 回归分析 监督式学习 Python各位大佬好,本人目前在用sklearn中LogisticRegression针对同一批样本数据(包括训练样本和测试样本,sklearn默认两个样本的比例为4:1)来训练一个回归模型,模型训练完后,应用于一批预测数据,计算各个预测数据的概率,最终进行分类,为什么针对同一批样本数据和同一批预测数据,没运行一次程序计算的概率和前几次计算的概率有很大出入?(例如,样本数据集A,利用sklearn从A训练一个模型M,预测数据集为C,第一次运行程序训练出模型M1,应用M1于C得到C中各个纪录的预测概率,但第二次再运行程序训练模型M2,因为样本数据没变,那么M2应该和M1的一样,应用M2于C来预测C中各个纪录的预测概率,但第二次预测的概率和第一次预测的概率有很大不同)因为是同一批样本数据,不是应该每次训练的模型的参数应该是相同,那么每次计算的预测数据的概率应该也是相同,为什么会出现每次计算的概率会不同的情况?求大佬解惑,万分感谢!
Answer
sklearn.linear_model.LogisticRegression里有随机种子,每次运行前会随机打乱数据,你训练时要固定这个随机种子才能得到一样的模型,random_state自己随便用一个整数代替就好
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression(penalty=’l2’, C=1.0, random_state=0)
逻辑回归本身并没有特别复杂的设定,在LogisticRegression中只有penalty和C两个超参可以调整。具体数值可以通过交叉验证进行选择确定。
Question 1006066: tf.add和直接使用加号+有什么区别吗?
统计/机器学习 Python TensorFlowtensorflow里两个变量相加可以通过tf.add(x, y)完成,也可以直接x+y。这两个有区别吗?
Answer
tf.add(x, y)和x+y在运算上没有区别
tf.add(x, y)的的优势是可以利用tf.add(x, y, name)中的name来对操作进行命名
我觉得两者完全是等价的
Question 1006079: adaboost里的feature importance和随机森林里的feature importance是一回事吗?
统计/机器学习 监督式学习 特征选择 Pythonsklearn里这两个模型都有feature_importances_,这个特征重要性在这两个不同算法中是一回事吗?
Answer
算法差不多,每个树里都可以算出一个feature importance,Random Forest是对每棵树的feature importance求均值,Adaboost是对每棵树的feature importance求加权均值。
Question 1006084: numpy里的np.newaxis有什么用?
统计/机器学习 Pythonnumpy里的np.newaxis有什么用?
Answer
newaxis是可以对numpy array进行升维操作的。
arr = np.arange(5)
# arr的shape是(5, )
# 1d升到2d
arr1 = arr[np.newaxis, :]
# arr1的shape是(1, 5)
# 1d升到3d
arr2 = arr[np.newaxis, np.newaxis, :]
# arr2的shape是(1, 1, 5)
np.newaxis就是保持原数据的情况凭空增加一个维度
Question 1006094: 關於pytorch cnn輸出層。
统计/机器学习 Python 人工神经网络各位先進大家好:
最近在學pytorch,我在官網看tutorial發現一個問題
這是cnn的分類問題,想請教輸出的時候為何不需要指定activation function
照理說應該要用softmax輸出啊?
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
# 1 input image channel, 6 output channels, 3x3 square convolution
# kernel
self.conv1 = nn.Conv2d(1, 6, 3)
self.conv2 = nn.Conv2d(6, 16, 3)
# an affine operation: y = Wx + b
self.fc1 = nn.Linear(16 * 6 * 6, 120) # 6*6 from image dimension
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
def forward(self, x):
# Max pooling over a (2, 2) window
x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
# If the size is a square you can only specify a single number
x = F.max_pool2d(F.relu(self.conv2(x)), 2)
x = x.view(-1, self.num_flat_features(x))
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
def num_flat_features(self, x):
size = x.size()[1:] # all dimensions except the batch dimension
num_features = 1
for s in size:
num_features *= s
return num_features
Answer
是的,多元分类是需要softmax激活函数的。
但是,pytorch中的CrossEntropyLoss已经包含了softmax这个过程了,所以在pytorch中不需要softmax,直接用linear的结果就可以了。可以看下官方文档https://pytorch.org/docs/stable/nn.html#crossentropyloss
謝謝,又學了一樣
Question 1006104: python中如何实现保序回归算法?
统计/机器学习 回归分析 Pythonpython中如何实现保序回归算法?求指导!
Answer
sklearn保序回归Isotonic Regression官方文档
Isotonic Regression的使用和可视化的例子
Question 1006106: corss_val_score的scoring='accuracy'可以执行,使用其它参数报错
统计/机器学习 监督式学习 模型验证 PythonAnswer
ValueError: Target is multiclass but average='binary'. Please choose another average setting.
错误信息已经告诉你了,你在做多元分类,但是你用的是二元分类的scoring,所以报错了
Question 1006113: pandas新建一个只有一行的dataframe时结果返回空的dataframe
统计/机器学习 Python我的操作如下
不知道为什么是空的,谢谢!
Answer
df['x'] = [1]
Question 1006122: 怎么把训练好的bin格式的word2vec模型导入到gensim中使用?
统计/机器学习 自然语言处理 Python我在网上下载了一个训练好的word2vec的模型,文件后缀是bin,然后怎么导入到gensim来使用呢?
Answer
import gensim
model = gensim.models.KeyedVectors.load_word2vec_format('GooglePretrianed.bin', binary=True)
你把GooglePretrianed.bin换成你下载的bin文件的路径名字就可以了
Question 1006131: spark里怎么refresh表?
统计/机器学习 Python mysql跑一个程序spark提示报错(具体描述见下),大概的意思就是说要refresh table,请问应该怎么refresh呢?
The underlying files may have been updated.
You can explicitly invalidate the cache in Spark by running 'REFRESH TABLE tableName' command in SQL or by recreating the Dataset/DataFrame involved.
谢谢
Answer
spark.catalog.refreshTable("my_table")
sql_context.sql("REFRESH TABLE table_name")
import org.apache.spark.sql.hive.HiveContext
hiveContext.refreshTable("tableName")
Question 1006147: 如何生成一个二元分类的数据集?
统计/机器学习 监督式学习 Python我想试验一下一个算法,需要一个二元分类的数据集(数据是多维的)做simulation,这种数据集该怎么生成呢?最好是python的,不一定需要具体的代码,思路也可以
Answer
了解一下sklearn里的sklearn.datasets.make_classification
可以生成binary classification的数据集,维度的数量也可以直接设置,维度的相关性也可以设置,非常方便
Question 1006183: spark sql里怎么用case when?
统计/机器学习 Python mysqlspark sql有没有类似mysql里的case when?怎么用?
Answer
spark里可以用when和otherwise的组合,比如在pyspark里
from pyspark.sql import functions as F
df.select(F.col('score'), F.when(F.col('age') > 4, 1).when(F.col('age') < 3, -1).otherwise(0)).show()
Question 1006196: pandas怎么求一列的移动中位数?
统计/机器学习 数据预处理 Pythonpandas怎么求一列的移动中位数?
Answer
Question 1006198: python倒序的range
统计/机器学习 Pythonrange(1, 5)可以得到[1, 2, 3, 4]
range(5, 1)可以得到[4, 3, 2, 1]结果却是空
怎么实现倒序的range?
Answer
range(1, 5)[::-1]
或者
range(4, 0, -1)
Question 1006202: gensim.models.word2vec模块的LineSentence有什么用?
统计/机器学习 自然语言处理 Pythongensim.models.word2vec模块的LineSentence有什么用?
Answer
LineSentence是按行读取文件中的每一行,
infilename = 'sample_text.txt'
lines = gensim.models.word2vec.LineSentence(infilename, max_sentence_length=10, limit=3)
max_sentence_length是返回的每句话中元素的最大个数,limit=3是说读取sample_text.txt中的前三行。
for line in lines:
print(line)
你可以用上面的方法把lines里的每句话打印说来。
假如你的文件里一共有8行,第一行有16个词,第二行有8个词,第三行有22个词。那么你lines里最终得到的是六句话,第一句是10个词,第二句是6个词,第三句是8个词,第四句是10个,第五句是10个词,第六句是2个词。
你试试就知道了。
Question 1006204: 怎么删除pandas数据框指定的第k行?
统计/机器学习 Python怎么删除pandas数据框指定的第k行?如果不存在第k行就不操作,如果存在第k行就进行删除。
Answer
假设数据框的变量名为df
# 删除第k行
df.drop(df.index[k])
# 删除第i,j,k行
df.drop(df.index[[i, j, k]])
#删除第k行
new_df = pd.concat([df.iloc[:k], df.iloc[k+1:]])
Question 1006322: datetime模块里的datetime.combine什么用?
统计/机器学习 时间序列 Pythondatetime模块里的datetime.combine什么用?
Answer
时间戳是包含年-月-日,时-分-秒的。combine就是把年月日和时分秒合并在一起,得到一个完整的时间戳。
import datetime
datetime.datetime.combine(datetime.date.today(), datetime.time.min)
比如上面的例子就是把今天的日期和0点0分合并在一起,得到时间戳。
Question 1007354: numpy里面resize和reshape的区别是什么?
统计/机器学习 Python请问numpy里面resize和reshape的区别是什么?使用场景分别是什么?
Answer
对于一个numpy array x,x.reshape(new_shape)不是inplace的,x.resize(new_shape)是inplace的改变
此外reshape要比resize灵活,比如把x转成行向量,就可以用
x_new = x.reshape([1, -1])
把x转成列向量,就可以用
x_new = x.reshape([-1, 1])
Question 1007381: 使用lightgbm,训练前对数据特征赋予权重是否对结果有影响
统计/机器学习 监督式学习 数据预处理 特征选择 PythonAnswer
对于树模型(决策树、随机森林、xgboost,lightgbm),对特征进行保序变换是不会影响模型结果的。
因为树在寻找到特征分裂点之后,小于它的样本都被放在左子节点,大于它的样本都在右子节点。你对一个特征做了乘法运算,这个是线性运算,自然也是保序的,也就是每个元素的大小顺序没有改变,所以训练出来的模型自然没有变化。
Question 1007389: 如何在日期序列中补齐缺失的日期
统计/机器学习 数据预处理 时间序列 Python有一个如下的excel
期望每天有一行数据
如果出现09/01/2019 09/04/2019
如何插入两行数据 09/02/2019 09/03/2019
Answer
你可以建一个完整的日期的dataframe,然后把两个dataframe join起来
参考这个解答的第一部分http://sofasofa.io/forum_main_post.php?postid=1003719
Question 1007392: 把分组频数统计的结果添加到原来dataframe中
统计/机器学习 数据预处理 Pythonprint(data.groupby(by=['ID'], as_index=False).count())
只能产生分组频数统计
----------------------
0 a
1 a
2 b
但是我期望结果是
0 a 2
1 a 2
2 b 1
这种如何解决
Answer
用transform,然后可以把结果作为新的一列count_ID插入到dataframe里
data['count_ID'] = data.groupby('ID')['ID'].transform('count')
Question 1007397: matplotlib怎么强行隐藏图像?
统计/机器学习 数据可视化 Python正常情况下,我们在结尾加上plt.show(),作的图像就会显示出来了。如果我不想让图像出现,该怎么办?我把plt.show()这行给去掉了也没用。
Answer
把
plt.show()
换成
plt.close()
Question 1007405: 在jupyter notebook里显示pandas的DataFrame如何隐藏index这列?
统计/机器学习 Python在jupyter notebook里我用display这个命令显示dataframe,但是它会一起显示index这列。index这列对我来说没有意义,该怎么隐藏index这列呢?
Answer
from IPython.display import HTML
HTML(df.to_html(index=False))
Question 1007426: SHAP太慢了,该怎么解决?
统计/机器学习 特征选择 数据可视化 Python吐槽一下python里的SHAP,实在太慢了,三十万左右的数据量一百个特征,基本上跑不出来。有什么替代方案吗?
Answer
Github上有一个讨论,供参考
Question 1007432: 请问在sklearn怎么在已有的模型的基础上训练新的数据?
统计/机器学习 监督式学习 Python之前已经在sklearn里训练好了一个分类模型,现在因为有了新的训练数据,如何在之前模型的基础之上利用新数据更新模型呢?
谢谢~!
Answer
只要有partial_fit方法,就可以在原有模型的基础上继续训练。
sklearn中有partial_fit的方法有:
分类算法
sklearn.naive_bayes.MultinomialNB
sklearn.naive_bayes.BernoulliNB
sklearn.linear_model.Perceptron
sklearn.linear_model.SGDClassifier
sklearn.linear_model.PassiveAggressiveClassifier
回归算法
sklearn.linear_model.SGDRegressor
sklearn.linear_model.PassiveAggressiveRegressor
无监督
sklearn.cluster.MiniBatchKMeans
sklearn.decomposition.MiniBatchDictionaryLearning
假设模型有N个可训练参数,一个训练好的模型是N维参数空间一点。当训练数据确定后,loss function是一曲面,训练就是找到局部或全局最小值。新加入数据后,loss对应曲面会变化,要从上次最小值开始找新的最小值。(loss曲面在每个mini batch都会变,只是训练次数多了,统计意义上相当于一个曲面,可理解为曲面的平均。)
需要注意的是新旧数据比例,学习率 learning rate,学习次数。需要设置提前结束条件,也不能只用新数据训练,否则很容易过拟合到新数据,而“忘记”旧数据。
继续fit
Question 1007457: 如何修改hist()直方图纵轴的取值范围(表示的概率)?
统计/机器学习 概率分布 数据可视化 Python图2 的纵轴范围变成图1 的,求大神帮忙,谢谢啦!
Answer
设置一下hist里的weights
plt.hist(x, bins=60, weights= [1./ len(x)] * len(x))
或者可以参考这个python直方图y轴显示占比,而不是绝对数值
Question 1007507: (LGB+LR)关于lightgbm中的参数y_pred = gbm.predict(X_train, pred_leaf=True)
统计/机器学习 监督式学习 推荐系统 特征选择 PythonX_trin=X1[0:5000]
y_train=Y1[0:5000]
gbm = lgb.LGBMClassifier(boosting_type='gbdt',max_depth=-1,objective='multiclass',
num_leaves=5,learning_rate=0.6,n_estimators=1500,metric= 'multi_error',max_bin=150,verbose=-1)
gbm.fit(X_train, y_train,eval_set=[(X1, Y1)],early_stopping_rounds=500,eval_metric='multi_error')
y_pred = gbm.predict(X_train, pred_leaf=True)
print(y_pred.shape)
上面的是LGB的参数,训练样本5000,标签四分类0,1,2,3
上面是运行结果 我想请教下1308代表的是什么 我看网上说y_pred[:,0] 输出的才是index 但是我不知道为什么
Answer
你把关键代码复制一下,不然也不知道你的y_pred是什么意思
如果你要得到每个叶子的输出结果,你在调用模型进行predict或者predict_proba的时候设置一下参数,例如:
clf = LGBMClassifier(...)
leaves = clf.predict(x_test, pred_leaf=True)
Question 1007513: pyspark里怎么把一列日期转成是全年的第几周?
统计/机器学习 数据预处理 Python mysql比如有一列日期,是yyyy-mm-dd格式的字符,我想把它转成第几星期,比如2020-01-13就是第3周。
想要的效果是:
2020-01-13 ===== 3
2020-01-15 ===== 3
2020-01-29 ===== 5
2020-02-07 ===== 6
Answer
pyspark的函数里有date_format,可以让日期变为week of year
from pyspark.sql import functions as F
把日期dt这列变成第几周的代码是
F.date_format(F.col('dt'), 'w')
然后得到的数就是表示是该年度中的第几周
df2 = pd.DataFrame({'date':['2020-01-21 10:20:23', '2020-01-22 11:20:23', '2020-02-21 10:50:33']})
df2['date3']=pd.to_datetime(df2.date).dt.weekofyear
Question 1007527: python 如何根据日期进行分组处理
统计/机器学习 数据预处理 时间序列 Python有一个数据框 ,
每个pid对应的日期的start end 不同
如何新产生一列分组var,
使得 var从pid start到end 每7天是一组
比如 图中pid 2011-07-01 到 2011-07-07 var=1
2011-07-08 到 2011-07-14 var=2
2011-07-15 到 2011-07-21 var=3
依次类推
产生这个var之后 我可以根据groupby 进行分组处理
Answer
你用date里的日期减去2011-07-01得到的天数,然后整除7就可以了
假如你的数据框叫做df,可以用下面的代码得到你要的var
df['var'] = (pd.to_datetime(df['date']) - pd.to_datetime('2011-07-01')).dt.days // 7
Question 1007529: pandas df怎么根据weekgroup补齐没有的行呢
统计/机器学习 数据预处理 Pythondf怎么根据weekgroup补齐没有的行呢
设想weekgroup 是0 1 2 3 4 --weekmax
比如下图pid=297157的时候补8 9 11 13 15 14 16 ....
Answer
Question 1007545: 问句python语法含义
统计/机器学习 Pythonurban是dataframe
如果c7002含有.n 变成none 是字符呢 还是空值呢
urban.loc[urban['c7002'].isin(['.n','.r','.d']),'c7002']=None
Answer
None就是空值
Question 1007564: str.replace为什么会将数字替换成NaN
统计/机器学习 数据预处理 Pythondf = pd.DataFrame({'sales':[100,'$5','5,600',4564]})
df['sales'].str.replace('$','')
为什么会将数字替换成NaN
df['sales'].str.replace('$','')
df['sales'].replace('$','') 区别是啥
Answer
df['sales'].str 这个会把非str类型转换成NaN
df['sales'].str.replace('$','') 是对数据操作
df['sales'].replace('$','') 是对列操作
Question 1007572: 怎么把statsmodels训练的模型本地保存?
统计/机器学习 Python I/O怎么把statsmodels训练的模型本地保存?
Answer
就是正常的存储读取,用pickle就可以了
import statsmodels.api as sm
import pickle
# 训练模型
model = sm.OLS(y,X).fit()
# 保存本地
filepath = 'my_model.pkl'
with open(filepath, 'wb') as f:
pickle.dump(model, f)
# 从本地导入使用
with open(filepath, 'rb') as f:
new_model = pickle.load(f)
Question 1007581: pandas如何处理用户和商品的交互数据
统计/机器学习 推荐系统 数据预处理 Python推荐系统中,预测下一个用户可能购买的商品,则要加入用户历史交互过的商品交互信息,该怎么把数据转换过去呢?
下面有一个例子:
原始数据:
user_id item_id
1 1
1 2
1 3
转换后的数据:
user_id item_id item_1 item_2 item_3 label
1 1 0 0 0 2
1 2 1 0 0 3
1 3 1 1 0 4
item_1, item_2, item_3代表之前用户交互过的商品
希望有大神能帮忙看看
Answer
感觉pandas的crosstab可以满足你的要求
Pandas中除了crosstab, pivot_table也可以实现。
#crosstab
df = pd.DataFrame([[1, 1], [1, 2], [1, 3],[2,1],[2,2],[2,2]],
columns=['user_id', 'item_id'])
pd.crosstab([df.user_id, df.item_id], df.item_id)
#pivot_table
pd.pivot_table(df,index = ['user_id', 'item_id'],
columns='item_id', values='item_id',
aggfunc=len, fill_value=0)
Question 1007589: sklearn DecisionTreeRegressor模型中为什么会有随机种子random_state?
统计/机器学习 监督式学习 Python我印象中决策树里没有采样的步骤,为什么sklearn的DecisionTreeRegressor中还有随机因子random_state?
Answer
这个问题是因为,学习一个最优决策树是一个NP问题。 所以实际应用中,生成决策树是基于启发式算法的,比如贪婪算法,贪婪算法可以在每个节点进行局部最优点求解,但它无法保证返回全局最优解。不论是random forest还是decision tree,贪婪算法会随机且多次抽取部分特征和样本,这个随机抽取过程可以通过random_state来决定。
顺便提一嘴,挺有名的教程《Hands-On Machine Learning with Scikit-Learn and TensorFlow》总是使用random_state=42, 当然实际中random_state可以选择任何一个数值。
Reference:
一个很类似的问题和解答
Question 1007596: plt.scatter中c参数和cmap参数的区别是什么?
统计/机器学习 数据可视化 Pythonplt.scatter中c参数可以一个list来控制颜色,cmap也是控制颜色的,这两个参数有什么区别呢?
Answer
两者没有冲突的。
如果你不设置cmap,只设置c,c可以是一个值,比如c='red',表示散点图里所有的点都是红色。
如果散点图里有三个点,c=['r', 'g', 'b'],就表示三个点的颜色分别是红、绿、蓝。
你也可以同时设置cmap和c,cmap此时就是图谱,c就必须是数值array,array中元素的个数是和散点图里元素个数一致的。
plt.scatter(x, y, c=np.random.uniform(1, 2, 20), cmap='BuGn')
下图就是上面的效果,cmap是从蓝到绿的光谱
Question 1007601: pyspark返回每个分组某个值最大的行
统计/机器学习 Python mysql我现在一个hive表里有type,value,id等等好几列,我想返回type每个分组里value最大的行。
不能用groupby max,因为这样只能返回每个分组的最大值,而不是完整的行。我用pyspark应该怎么做呢?
Answer
这种用reducebykey就可以了
from pyspark.sql import functions as F
from pyspark.sql.window import Window
df = sql_context.createDataFrame([
("A", "ARON", 1),
("A", "BILL", 2),
("A", "CLAIR", 3),
("B", "DANIEL", 1),
("B", "ERIC", 4),
("B", "FRANK", 2),
], ["id", "name", "weight"])
def max_row(row1,row2):
if row1['weight'] > row2['weight']:
return row1
else:
return row2
df_rdd = df.rdd.map(lambda row: (row['id'], row)).\
reduceByKey(lambda row1,row2: max_row(row1,row2)).map(lambda row: row[1])
sql_context.createDataFrame(df_rdd).show()
或者用分组排序后取第一个
windows_spec = Window.partitionBy("id").orderBy(F.col("weight").desc())
max_df = df.withColumn("rank", F.rank().over(windows_spec)).filter("rank =1")
max_df.show()
可能第一个会快一些吧,一般也都是用第一个
Question 1007603: 虚拟变量能否标准化?
统计/机器学习 回归分析 数据预处理 Python大多时候,处理数据时都是先对数值变量做标准化,再将分类变量one-hot编码。但有时出现这种情况:
对于某些连续特征,我需要将其二元化(如:大于0时,值指派为1;等于0时,值指派为0)。做了二元化后,无需one-hot编码,但是在标准化时,因为其属于数值类型,也会被一并标准化。那么,这样的标准化是否可行?在标准化时,我是否应该把这部分值为0/1的二元离散变量排除在外?
Answer
我个人的习惯是把已经二元化的变量跳过,只对非二元的数值特征进行标准化。
如果你有时间富余,可以两者方式都试试,交叉验证一下,看哪个效果好。我的经验是通常两种方法效果差不多。所以本质上没差别。
以神经网络为例说明为什么要标准化输入输出。假如输入输出variance比例为1000,有10层网络,那每层网络就需要缩小信号的variance2倍。但是我们一般把网络参数初始化为N(0,1),反而会增加variance。(假设xy独立,var(x+y)=var(x)+var(y) =var(x)+1)。此时初始化参数和收敛参数相差太远,会增加收敛时间。如果标准化会,初始化参数会里收敛值近一点。最好是用He Kaiming initialization, 这样收敛会更快。
0,1的onehot编码,variance离1差距不大,嫌麻烦可以不做标准化。如果输入variance比1大很多,需要标准化。
Question 1007610: 使用python plotnine画图 没有显示
统计/机器学习 数据可视化 Pythonfrom plotnine import *
import pandas as pd
from plotnine.data import *
median_age_dict={
'Country': ['New Zealand','Spain','Ireland','Israel','Denmark','Norway','Netherlands','Australia','Italy','Sweden'],
'Age': [39.0, 37.0, 35.0, 34.0, 34.0, 34.0, 34.0, 34.0, 34.0, 34.0]
}
median_age=pd.DataFrame(median_age_dict)
(ggplot(median_age,aes(x='Country',y='Age',fill='Country'))#创建图象,传入数据来源和映射
+ geom_bar(stat='identity')#建立几何对象,画直方图
)
也不报错
Answer
你试试加一个.draw()
my_plot = ggplot(.......)
my_plot.draw()
Question 1021640: Python 处理问题
统计/机器学习 Python请教各位大神,
我有一个字典 {'123':[10,23,30],'2344':[12,22] }
我想转为dataframe形式:
col1,col2
123,10
123,23
123,30
2344,12
2344,22
我现在只有循坏的办法,但是感觉不高效,用pd.DataFrame.from_dict()也不可行
不知道大家有啥好方法,谢谢
Answer
s = {'123':[10,23,30],'2344':[12,22] }
l = [[k, v] for k in s.keys() for v in s.get(k)]
pd.DataFrame(l)
我也写了一个循环,不知道有没有帮助
x = {'123':[10,23,30],'2344':[12,22] }
df = pd.DataFrame()
for i in x:
tmp = pd.DataFrame()
tmp['col2'] = x[i]
tmp['col1'] = i
df = pd.concat([df, tmp])
Question 1021739: python报错:'list' object has no attribute 'Angle',求教
统计/机器学习 Python大家好,python初学者求教一个问题.
我用class建了一个关于Panel的类,但是没法提取class中定义的内容
报错:AttributeError: 'list' object has no attribute 'Angle'
代码如下图
Answer
Question 1021946: 特征组合的重要性排序
统计/机器学习 监督式学习 特征选择 Python随机森林可以得到单个特征的重要性,有什么方法可以得到特征组合的重要性排序呢?例如有特征{F1,F2,F3......},得到{F1,F2}是最重要的,{F1,F3}是次重要的......
Answer
不大明白你这么做的意义是什么,你的例子里说“{F1,F2}是最重要的,{F1,F3}是次重要”,这个是不是就是说F1最重要,其次F2,然后F3?那就等价于用了单特征的重要性。
如果非要组合在一起看,我觉得你不如做一些特征工程,把{F1,F2}组成一个新特征,{F1,F3}组成一个新特征。把新特征放到模型里,自然就可以比较了。
Question 1021995: 怎么给seaborn的heatmap里光谱柱添加名称?
统计/机器学习 数据可视化 Python如上图所示,最右边的那个表示颜色和数值对应的,光谱柱怎么给它添加文本名称?
Answer
在heatmap里设置cbar_kws,但是显示在侧面,不是光谱的上面
sns.heatmap(np.random.uniform(0,1,[5,4]), cbar_kws={"label": "图例名称xxxx"})
plt.show()
Question 1022057: permutation importance
统计/机器学习 监督式学习 Pythonpermutation importance 原理是每次打乱一个特征看模型预测能力下降多少来判断特征重要性,那是否可以每次打乱两个特征,以此得到哪两个特征对模型预测是最重要的?
Answer
我觉得是可以的。
唯一的问题就是可能会有点慢,如果一共有500个特征,你需要跑500*499/2=124750次。
Question 1022078: 如何用matplotlib画出坐标与函数点有连线的散点图?
统计/机器学习 数据可视化 Python应该有不用写循环就将每一个坐标点与函数点相连的方法吧。
Answer
示例
plt.stem(x, y, markerfmt='C1o')
plt.plot(x, y)
plt.show()
又看了看官网的API,发现自己漏看了stem()方法。用stem()即可实现。
Question 1022080: 怎么对pandas dataframe按照一列的字符串的长度来排序?
统计/机器学习 Python我有一个很宽的pandas dataframe,其中有一列名称为description,这一列是文本。我想按照这一列中文本的长度从长到短对dataframe中的每一行重新排序。
我试了直接用df.sort_values('description', ascending=False),得不到以上效果。那应该怎么做?
谢谢各位!
Answer
new_df = df.reindex(df['description'].str.len().sort_values(ascending=False).index)
我想到的办法就是新插入一列len_d用来记录description的长度,然后对len_d这列排序,排完之后删除
df['len_d'] = df['description'].apply(len)
df = df.sort_values('len_d', ascending=False).drop('len_d', axis=1)
Question 1022086: 有没有能够判断文本中情绪的python package?
统计/机器学习 自然语言处理 Python 应用场景比如“我很生气”,这个是负面情绪。“今天真开心呀”,这个是正面情绪。
有没有python的packge能够直接判断中文语句情绪,最好是不需要是自己重新训练模型的。
谢谢!
Answer
最方便的就是SnowNLP了https://github.com/isnowfy/snownlp
直接安装snownlp
pip install snownlp
然后直接调用就可以得到结果了
from snownlp import SnowNLP
texts = '心情很好'
print(texts, SnowNLP(texts).sentiments)
得到的结果是0到1之间的数,1是积极,0是消极。
Question 1022090: 怎么获取sklearn.linear_model.SGDRegressor的回归系数、截距?
统计/机器学习 监督式学习 Python获得如下sgd_reg的模型
sgd_reg = SGDRegressor(max_iter=100) # 最大迭代次数
sgd_reg.fit(X, y)
怎么获得这个模型的截距和系数呢?
Answer
截距
sgd_reg.intercept_
系数
sgd_reg.coef_
Question 1022119: pandas怎么按照groupby串联字符串?
统计/机器学习 Python按照id进行groupby对text进行串联,我想要得到如下的结果
id text
1 abc,de
2 fab,c,xyz
这个怎么进行groupby的操作?
Answer
df.groupby('id').apply(lambda x:','.join(x['text']))
def concat(x):
return ','.join(x)
df.grouopby('id', as_index=False).agg({'text': concat})
Question 1022121: pd.read_csv报错Error tokenizing data,如何跳过错误的行?
统计/机器学习 Python我用pandas read_csv读取
data= pd.read_csv('data.txt', sep='\t')
报错如下
ParserError: Error tokenizing data. C error: Expected 6 fields in line 2571, saw 7
就是说第2571行数据有错。因为我数据量比较大,所以想直接跳过这一行,有什么办法可以快速跳过报错的行吗?
Answer
设置error_bad_lines参数为False,可以跳过所有有错误的行
data= pd.read_csv('data.txt', sep='\t', error_bad_lines=False)
不过通常要谨慎,因为如果文件中错误的行很多,你可能需要查看文件类型或者格式是否正确,而不是通过跳过错误的行
Question 1022123: ubuntu系统中怎么安装tesseract-ocr的中文识别库?
统计/机器学习 计算机视觉 Python想识别图片中的汉字,怎么ubuntu系统中怎么安装tesseract-ocr的中文识别库?
Answer
sudo apt-get install tesseract-ocr-chi-sim
Question 1022126: 一个数据预处理的问题
统计/机器学习 数据预处理 Python我有一个特征,其中的值分别是A,A&B,C,A&C这种形式,我是不是应该处理成{1,0,0;1,1,0;1,0,1;}这种形式,不知道
python有什么库可以处理成这样,sklearn可以吗?求大佬指教
Answer
sklearn里有现成的模块实现你的要求,官方文档里有例子
Question 1022138: matplotlib画双y轴时,怎么隐藏右y轴的坐标网格线?
统计/机器学习 数据可视化 Python如图所示,我用了twinx画了双y轴,但是图上会同时出现左y轴和右y轴的白色网格线,两个网格线有点太乱了。
我怎么才能隐藏掉右y轴对应的坐标网格线,让它不显示呢?
Answer
# 新建画板
fig, ax1 = plt.subplots(figsize=(10, 6))
# 新建右y轴
ax2 = ax1.twinx()
# 隐藏右y坐标轴的网格线
ax2.grid(False)
Question 1022143: pandas dataframe 日期间隔天数计算问题
统计/机器学习 数据预处理 时间序列 Pythondataframe中有两列数据'begin_date'和'end_date',现在通过这两列计算新的一列'work_days'。
'begin_date'和'end_date'的数据格式均为:Timestamp
需求:
1.如果'end_date'为空,则用当前日期 - 'begin_date';
2.如果''end_date'不为空,则'end_date' - 'begin_date'。
我的方法:
date_today = datetime.datetime.now().strftime("%Y-%m-%d")
date_today = pd.to_datetime(date_today)
a = map(lambda x, y: date_today - x if y == 'NaT' else y - x, df['begin_date'], df['end_date'])
df['work_days'] = list(a)
运行结果:
如上图所示,'end_date'不为空计算正常,'end_date'为空,就是结果仍然是'NaT'。
本人新手,求大佬们指点!!
Answer
不需要你写的那么复杂吧
days_to_today = (pd.to_datetime('today') - df['begin_date']).dt.days
df['workdays'] = (df['end_date'] - df['begin_date']).dt.days.fillna(days_to_today)
Question 1022150: jieba分词怎么用?
统计/机器学习 自然语言处理 Python我在anaconda里已经安装好了jieba这个package,下面一步我该怎么操作才能得到一句话分好词的结果?
比如我希望,输入一句话,返回分好词的list
input_text = '今天天气晴朗'
result = ['今天', '天气', '晴朗']
利用jieba该如何实现呢?
Answer
text = '今天下雨'
word_list = list(jieba.cut(text))
print(word_list)
['今天', '下雨']
Question 1022160: python怎么把字符串类json转成字典dict类型变量?
统计/机器学习 Python我从表里读取了json类型的字段,得到的是字符串。如下格式
'{"firstname":"David","surname":"John","age":32, "hobbies": [0, 2, 7]}'
这个就是文本,无法直接方便得得到各个key的结果。怎么直接把文本变成python中字典dict类型的呢?
Answer
eval 也行,但建议用 json.loads
import json
json_str = '{"firstname":"David","surname":"John","age":32, "hobbies": [0, 2, 7]}'
json_obj = json.loads(json_str)
my_texts = '{"firstname":"David","surname":"John","age":32, "hobbies": [0, 2, 7]}'
my_dict = eval(my_texts)
eval是python内自带的函数
json.loads()
eval 危险性函数,不建议使用。建议 json.loads
Question 1022174: sklearn错误ImportError: cannot import name 'joblib'
统计/机器学习 Python---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
in
----> 1 from sklearn.externals import joblib
ImportError: cannot import name 'joblib'
我需要保存sklearn模型,但是无法引用sklearn里的joblib。
Answer
直接import就行了
import joblib
Question 1022178: jieba.cut中use_paddle是什么模式?
统计/机器学习 自然语言处理 Pythonjieba.cut分词时可以设置use_paddle,这种情形下的分词是什么模式的?与默认的方式有什么不同吗?
Answer
精确模式:试图将句子最精确的切开,适合文本分析;
全模式: 把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义;
搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
paddle模式: 预先利用PaddlePaddle,训练的序列标注模型来实现分词,支持词性标注;paddle模式使用需安装paddlepaddle-tiny
Question 1022207: python中怎么获取每月的最后一天的日期?
统计/机器学习 Pythonpython中怎么获取每月的最后一天?比如2019年11月,最后一天是'2019-11-30';比如2020年2月,最后一天是'2020-02-29'。
Answer
可以用calendar 获取每月的总天数,总天数就是每月的最后一天。
>>> import calendar
>>> calendar.monthrange(2020,2)[1]
29
>>> calendar.monthrange(2019,11)[1]
30
import calendar
def last_day_month(year, month):
if month < 10:
return str(year) + '-0' + str(month) + '-' + str(calendar.monthrange(year, month)[1])
return str(year) + '-0' + str(month) + '-' + str(calendar.monthrange(year, month)[1])
可以输入last_day_month(2020, 2),可以得到'2020-02-29'
Question 1022212: 如何用python获取一个文件的最后修改时间?
统计/机器学习 Python比如路径下有一个文件data.csv,怎么在python中读取文件里数据时同时获取data.csv这个文件的最后更新时间呢?
Answer
可以尝试一下 os
>>> import time, os
>>> file_path = "/Users/Documents/test.py"
>>> latest_time = os.path.getmtime(file_path)
>>> print(time.ctime(latest_time))
Sat Aug 8 22:28:25 2020
Question 1022216: 统计substring在pandas dataframe中一列文本中出现的次数?
统计/机器学习 Python比如dataframe中一列是content,是文本数据。
我怎么生成一列content_times,是统计content这列中每格数据里出现'yes'的次数?
Answer
count() --- counts how many times str occurs in a string:
>>> SearchMe = "The sky is blue and the ocean is blue too"
>>> print(SearchMe.count("is"))
2
Question 1022246: 怎么删去pandas中有空值、nan、null的行?
统计/机器学习 数据预处理 Pythonpandas中有的行里包含空、null或者nan,怎么可以快速删去这些行呢?
Answer
df = df.fillna() # 缺失值填充
df = df.dropna() # 缺失值删除
Question 1022256: sklearn GridSearchCV的结果cv_results_怎么转成pandas的DataFrame?
统计/机器学习 模型验证 PythonGridSearchCV的结果cv_results_怎么转成pandas的DataFrame?
Answer
直接用pd.DataFrame就可以转了
gs_cv = GridSearchCV(model, param_grid=depth , cv=3, scoring='roc_auc')
ds_cv_fit = gs_cv.fit(x, y)
cv_results_df = pd.DataFrame(ds_cv_fit.cv_results_)
Question 1022269: python能不能直接读取word文本,doc或者docx文件?
统计/机器学习 Python I/Opython能不能直接读取word文本,doc或者docx文件?
Answer
Question 1022305: python怎么只保留某列前几个数字
统计/机器学习 Python比如
name date
a 20110928
b 20121124
c 20130326
把date保留成
2011
2012
2013
谢谢
Answer
假定你的文件是csv哈,你用pandas读取csv文件操作DataFrame就可以了,具体去查apply用法就懂了
import pandas as pd
def get_year(date):
for i in range(4):
date = date // 10
return date
a = pd.DataFrame([['a', 20110928],
['b', 20121124],
['c', 20130326],])
a[1] = a.apply(lambda x: get_year(x[1]), axis = 1)
print(a)
输出:
0 1
0 a 2011
1 b 2012
2 c 2013
import pandas as pd
df.date = df.date.apply(lambda x: str(x)[:4]) # 这里要看你原始date列的类型
解决了
Question 1022306: python函数:
统计/机器学习 Pythoncompany year label
a 2011 1
a 2011 1
a 2012 1
a 2013 1
b 2015 0
b 2015 1
b 2015 0
b 2016 1
b 2016 0
b 2016 0
b 2017 0
b 2017 0
如果X公司在某年有至少一次评级下调,就返回1,否则返回0
比如b在2015年最后虽然最后为0但因为下调过一次就返回1,在2016年上调返回0
Answer
感觉跑循环可以解决。
嵌套循环,对每一个公司,然后循环年份。
Question 1022366: python里怎么安装CatBoostClassifier?
统计/机器学习 监督式学习 Python请问python里怎么安装?
Answer
Linux系统里可以直接安装
pip install catboost
Question 1022377: 机器学习中如何将几种度量距离的量进行线性组合
统计/机器学习 监督式学习 数据预处理 Python在机器学习中如何将度量距离的量D1和D2进行线性组合,得到D=r1*D1+r2*D2,(D1:欧几里得距离,D2=1-T,其中T表示Tanimoto similarity index)
Answer
具体的看你用什么模型啊,你的问题没头没尾。
提问题的应该
1. 说明你要做的是啥任务,用的是啥类型的数据,用的是啥模型,
2. 问题是啥
3. 如何解决这个问题
Question 1022423: EM
统计/机器学习 无监督学习 数据预处理 Python请问如何使用GMM与EM算法的Python实现三维数据的处理
Answer
学会使用GitHub
https://github.com/pmelchior/pygmmis
Question 1022470: pandas变形
统计/机器学习 Python1 3
2 4
a c
b d
变成
1 2 3 4
a b c d
就是偶数行变成列上 r*c 变成 r/2 * 2c
两种格式相互变
Answer
使用numpy的reshape即可:
>>> df = pd.DataFrame([[1, 3], [2,4], ['a', 'c'], ['b', 'd']])
>>> df
0 1
0 1 3
1 2 4
2 a c
3 b d
>>> pd.DataFrame(df.values.reshape((2, -1)))
0 1 2 3
0 1 3 2 4
1 a c b d
Question 1655933: python里的TYPE_CHECKING是什么作用?
统计/机器学习 Python在别人的代码里看到引用了TYPE_CHECKING这个函数
from typing import TYPE_CHECKING
使用的方法就是
if TYPE_CHECKING:
看起来像是个常数,但是具体是什么意思呢?
Answer
这个主要是为了防止循环引用出现的差错,比如说这种
ImportError: cannot import name 'zzz' from partially initialized module 'xxx'
(most likely due to a circular import)
为了防止循环import相互依赖的module,可以先用type_checking
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from models import zzz
如果想看更具体的解释,可以看看这个链接https://adamj.eu/tech/2021/05/13/python-type-hints-how-to-fix-circular-imports/
Question 1655934: python里怎么实现Dynamic Time Warp(DTW)算法呢?
统计/机器学习 时间序列 Python 空间信息python里怎么实现Dynamic Time Warp(DTW)算法呢?如果有直接调用的函数是最好的
Answer
Question 1655946: 怎么利用python批量替换多个txt文件中的文字片段?
统计/机器学习 Python请教一下各位,假如我有1.txt,2.txt,...,100.txt这100个文本文件,其中大部分文件中包含"xyz123"这个字符串,我想利用Python把所有文件中的"xyz123"换成"abc456"。
为了达到这个目标,代码改如何实现,有没有现成的函数呢?
Answer
按行来读取文本,然后用relace函数来做替换
import re
for i in range(1, 101):
#读取文件
finput = open('%s.txt'%i, 'r')
#存放新文件
foutput = open('/new/%s.txt'%i, 'w')
#文本替换
old_script = 'xyz123'
new_script = 'abc456'
for l in finput.readlines():
foutput.write(l.replace(old_script, new_script))
finput.close()
foutput.close()
Question 1655955: python里怎么计算曼哈顿距离?
统计/机器学习 描述性统计 Pythonpython里怎么计算两个向量的曼哈顿距离?
Answer
曼哈顿距离其实就是L1距离,$x=(x_1,\cdots, x_n)$,$y=(y_1,\cdots,y_n)$,曼哈顿距离就是
$$\sum_{i=1}^n|x_i-y_i|$$
定义清楚了,代码就很好写了
import numpy as np
x = np.random.random(10)
y = np.random.random(10)
# 计算曼哈顿距离
d1 = np.sum(np.abs(x - y))
numpy有自带的范数公式,可以用计算对应范数的距离
from numpy import array
from numpy.linalg import norm
x = array([1, 2, 3, 4, 5])
y = array([2, 0, 3, 5, 1])
# 曼哈顿距离对应着L1范数
d1 = norm(x - y, ord=1))
# 欧式距离对应着L2范数
d2 = norm(x - y, ord=2))
Question 1656011: pandas怎么根据就近原则填充dataframe中的缺失数值?
统计/机器学习 Pythondataframe中有些行的部分单元格数据空缺,怎么根据就近原则来进行填充呢?就是用上一行的数据填充到下一行空缺的单元格内。
Answer
pandas.dataframe.fillna里的method可以用来做数值填充
method='ffill', axis=0 表示用上一行填充
method='bfill', axis=0 表示用下一行填充
如果axis=1,就是对列进行填充
# 用上一行填充缺失值
df = df.fillna(method='ffill', axis=0)
Question 1656014: Scipy里引用imread报错:ImportError: cannot import name 'imread'
统计/机器学习 计算机视觉 Python按照网上其他人的代码来读取图像
from scipy.misc import imread
my_img = imread('1.png')
但是报错
ImportError: cannot import name 'imread'
我看别人能够正常运行,为什么到我的电脑上就会有问题,我用的是windows系统的。
Answer
imread应该是从scipy.misc当中被移除了
替代方案还是挺多的
1)open-cv
import cv2
f = cv2.imread(filename)
2) imageio
import imageio
f = imageio.imread(filename)
3)skimage
import skimage
f = skimage.io.imread(filename)
4)matplotlib
import matplotlib
f = matplotlib.image.imread(filename)
Question 1656015: 怎么把多个csv表格读进python然后合并成一个表格输出为csv?
统计/机器学习 数据预处理 Python I/O本地有多个关于销售数据的csv文件,2018.csv,2019.csv,2020.csv,2021.csv等等,它们的格式是一样的,表头名称和顺序都是一致的,我怎么把这些csv文件读入python,然后按照年份从远到近合并在一个表格里,以csv的形式重新输出到本地?
Answer
按照年份顺序read_csv,然后concat就好了
import pandas as pd
#创建一个空数据框,用于存放合并结果
result = pd.DataFrame()
#跑循环
for year in [2018, 2019, 2020, 2021]:
#读取每个文件
df = pd.read_csv('%s.cvs'%year)
#每读一个合并一个
result = pd.concat([result, dfs[year]])
#输出结果
result.to_csv('result.csv', index=Flase)
Question 1656026: plt.show()之后matplotlib图像依然不展示
统计/机器学习 数据可视化 Python我用的是Jupyter notebook,使用了matplotlib,而且也有plt.show()的命令。
但是图像却没有出来。代码如下,麻烦各位指教一下
import matplotlib.pyplot as plt
rndints = pd.Series(np.random.randint(1, 6, size=100))
rndints.hist()
plt.show()
谢谢!
Answer
一个方法是在在最上面声明matplotlib inline
%matplotlib inline
import matplotlib.pyplot as plt
另外一个方法是不调用pandas的hist,直接用plt的
plt.hist(rndints)
plt.show()
在最前面加上%matplotlib inline
%matplotlib inline
import matplotlib.pyplot as plt
rndints = pd.Series(np.random.randint(1, 6, size=100))
rndints.hist()
plt.show()
Question 1656037: 怎么按照设定概率产生不重复的随机排序?
统计/机器学习 概率分布 抽样方法 Python例如5个运动员参加比赛,运动员A有10%的概率夺冠,B有30%的概率,C有5%的概率,D是15%,E有40%。现在想产生一个随机的名词排序,抽样的时候要符合上面的概率。
这个问题可以是看作是无放回的抽样,但是又要保证每个数都要正好只出现一次。
在python里的实现方式没有什么思路,求助大家。
Answer
看来下numpy random里的permutation和choice都不能满足题主的要求。
我试着自己写了一个,基本上是暴力解法,轻拍
import numpy as np
def random_rank(members, probs):
if len(members) <= 1:
return members
else:
rank_1 = np.random.choice(members, size=1, p=np.array(probs)/np.sum(probs))[0]
rank_1_i = members.index(rank_1)
new_members = members[:rank_1_i] + members[rank_1_i+1:]
new_probs = probs[:rank_1_i] + probs[rank_1_i+1:]
rank_else = random_rank(new_members, new_probs)
return [rank_1] + rank_else
用了递归的思想,先从members里按照概率,产生一个冠军;冠军产生后把他从members剔除掉,然后剩下的人里按照概率再产生一个冠军,然后依次进行。
Question 1656069: numpy怎么读取csv格式的数组文件?
统计/机器学习 Python I/O一个csv格式的数组文件,如果不通过pandas读取,怎么直接用numpy读取呢?
Answer
np.genfromtxt
import numpy as np
arr = np.genfromtxt(filepath, delimiter=',')
来自sofasofa(一个专业的机器学习社区),建议去sofa社区阅读,这里只是记录。防止网站在网络中走失。