Question 1000207: Python里画直方图

统计/机器学习 描述性统计 数据可视化 Python

请教在Python里画直方图的最简单的方法。比如我有100个点,想画成有10个组的直方图。有没有简便的方法?谢谢!


Answer

Answer 1:

最简单的画直方图的方法是调用matplotlib.pyplot中的hist函数。如果你的数组是s,想要画有10个组的直方图,下面的代码可以达到这样的目的


import matplotlib.pyplot as plt
plt.hist(s, bins=10)




Question 1000208: 怎么求一个数组的移动平均数

统计/机器学习 数据预处理 Python

在Python中,怎么求一个list或者pandas.Series一列数据的移动平均数?有现成可以直接调用的函数吗?


Answer

Answer 1:

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

Answer 1:


>>import sklearn
>>print('Your version is {}'.format(sklearn.__version__))
Your version is 0.18.01


这个方法也能够查其他模块的版本。



Question 1000225: python里清除已经定义过的变量

统计/机器学习 Python

有时候数据特别大,内存不够,没用的变量就想先删掉了,节约点空间。请问python里怎么删除变量?


Answer

Answer 1:

如果是想删掉某个变量x

>>>del x

如果是要删掉所有变量

>>>%reset -f
Answer 2:

del完之后最好再gc.collect()一下,释放出空间

del my_var
import gc
gc.collect()

Question 1000254: Python计算两个数组的相关系数

统计/机器学习 描述性统计 Python

我现在是自己写的小函数来计算相关系数的。Python里有没有现成的函数能够计算两个数组的相关系数的?


Answer

Answer 1:

还有一种是numpy.corrcoef。这个可以可以求多个数组的相关系数。

比如要求a,b,c,d两两之间的相关系数。 

import numpy as np
np.corrcoef([a,b,c,d])

得到一个4乘4的对称矩阵,矩阵元素就是相关系数。

Answer 2:


>>> 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值。

Answer 3:

如果数据在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

Answer 1:

对于一个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

Answer 1:

绝大部分机器学习的算法都可以在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检验

统计/机器学习 假设检验 Python

python里怎么做单侧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

Answer 1:

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

Answer 1:

也许你记错了?你说的像是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

Answer 1:

scoring设置错了,sklearn上的documentation写的也不是清楚,应该是这样


>clf = LogisticRegressionCV(scoring='roc_auc')



Question 1000383: sklearn里LogisticRegressionCV中的参量Cs什么意思

统计/机器学习 回归分析 模型验证 Python

这是sklearn LogisticRegressionCV文档链接。文档说了Cs是C的个数,但是这个C在模型里到底是什么意思?此外,比如我设定了Cs=15之后,这15个C是怎么产生的?


Answer

Answer 1:

在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

Answer 1:

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中的决策树是用的哪一种决策树算法?

统计/机器学习 监督式学习 Python

python sklean中的决策树是用的哪一种决策树算法?是ID3还是C4.5还是CART?

我能不能指定用它用ID3而不是其他算法?

谢谢!


Answer

Answer 1:

sklearn.tree.DecisionTreeClassifier基本上使用的是CART,稍稍有区别的是它对CART的计算性能进行了优化。

你是不可以指定它使用其他算法的。但是你可以设置sklearn.tree.DecisionTreeClassifier中criterion参数为"entropy",也就是信息增益,这样就几乎是ID3了。但是C4.5是基于信息增益率的,所以sklearn.tree.DecisionTreeClassifier做不到C4.5算法。


Answer 2:

无法做到指定ID3和C4.5的。

sklean里的decision tree模型,不管是回归还是分类,都限制为二叉树。

而ID3和C4.5,不一定是二叉树。CART必须是二叉树。从这个角度来看,sklearn的决策树是无法完全实现C4.5和ID3的。

还有一点就是batmanX提到的splitting cirterion的问题了。



Question 1000408: python产生服从常用概率分布的随机数

统计/机器学习 概率分布 Python

python里也没有现成的函数能够生成服从一些常用概率分布的随机数?比如正态分布,均匀分布,卡方分布之类一系列常用的概率分布。


Answer

Answer 1:

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分布随机变量


Answer 2:

可以查看numpy的官方文档numpy.random文档


Question 1000411: 让DataFrame中的行按照某一列元素的绝对值从大到小排列

统计/机器学习 数据预处理 Python

对于pandas.DataFrame,我想让这个df中的行按照某一列,比如说col_a中元素的绝对值的大小,从大到小排列,该怎么操作?


Answer

Answer 1:

假如你的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

Answer 1:

有现成的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

Answer 1:

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

Answer 1:

可以用pandas的get_dummies

df[feature] = df['country'].astype('category')
df = pandas.get_dummies(df, columns=['country'])


Answer 2:

对于字符类型,你需要先做LabelEncoder,把它转成整数类型,然后再用OneHotEncoder

具体代码可以参考我在这个问题里的回答:sklearn onehotencoder的具体用法是什么



Question 1000437: pandas.DataFrame选取最后k行

统计/机器学习 Python Pandas

怎么取出pandas.DataFrame的最后k行?

正在从R转Python,问题有些低级,请见谅!


Answer

Answer 1:

假如你的pd.DataFrame的名字是df,提取最后10行

>>> df.tail(10)

提取最后k行

>>> df.tail(k)

Answer 2:

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

Answer 1:

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

Answer 1:


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

Answer 1:

你说的是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

Answer 1:

更推荐len(df)

len(df)比df.shape[0]快20%到50%。虽然它们都已经非常快了。

Answer 2:

如果你的Pandas.DataFrame叫做df

求行数

>>> df.shape[0]

求列数

>>> df.shape[1]

对于一个array对象a,也一样

>>> a.shape[0]



Question 1000477: sframe和pandas.DataFrame哪个好用?

统计/机器学习 开放问题 Python

我一般都是用pandas.DataFrame。最近听不少人说sframe,不知道有没有人对两个都熟悉的,能讲一讲它们各自的优势和缺陷吗?


Answer

Answer 1:

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. 用法不完全一样。具体可以参考这里



Answer 2:

你们都是土豪么?

最大的区别难道不是GraphLab SFrame是付费的,Pandas是免费的么?


Answer 3:

pandas.DataFrame放在内存里,读取也快。

SFrame更适合大数据,比如1T以上的那种,可以放在磁盘空间上,所以读取也相对较慢。


Question 1000491: pandas怎么把字符串'yyyymmdd'转换为时间对象

统计/机器学习 数据预处理 时间序列 Python Pandas

我的pandas.DataFrame里有一列数据用来记录时间,但是是'20170320'这样的字符串结构,怎么把这一列转换为时间对象?


Answer

Answer 1:



>>> 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

Answer 1:

你的设置是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画散点图

统计/机器学习 数据可视化 Python

python里怎么画散点图?最好是三维的散点图,用散点的直径大小来表示第三维。

谢谢!


Answer

Answer 1:

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

Answer 1:

这个和在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

Answer 1:

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设置问题

统计/机器学习 监督式学习 Python

n_iter是循环次数的意思,应该是越大越好的。我设置n_iter=100,程序跑了很久,n_iter=100000,根本就跑不出来了,等了十几个小时了,为什么这么久,SGD的优势不是速度吗?

我又试了n_iter=1,就是只用一个数据点,按照预期,应该是立即出结果,结果很差。实际上是依然等了一会,而且结果并不离谱。

所以这个n_iter到底怎么用?


Answer

Answer 1:

n_iter其实是epoch的意思。

比如你的训练集样本数量是10000,那么你实际的训练次数是10000 * n_iter,而不是n_iter。所以如果你设置n_iter=100000的话,就需要很久很久才能跑完了。

Answer 2:

这个n_iter和训练神经网络时的epoch是一个意思


Question 1000532: pandas.DataFrame更改列名

统计/机器学习 Python Pandas

怎么修改pandas.DataFrame的列名?


Answer

Answer 1:


# 显示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']


Answer 2:

假设你的df里有一列叫做'col_1',如果你想把这列的名字改成'col_a',那么可以这样

df = df.rename(columns={'col_1': 'col_a'})



Question 1000542: pandas dataframe选择第k行

统计/机器学习 Python Pandas

对于pandas模块dataframe,怎么选取其中的第k行?


Answer

Answer 1:

选取第k行的代码为

df.iloc[k, :]

注意pandas的排序是从0开始的,也就是说首行是第0行。

Answer 2:

这样返回的是一个Series,如果想要list,可以train.iloc[k].tolist()

Answer 3:


df.loc[k]



Question 1000562: 怎么在已有的dataframe中插入一个新列(Pandas)

统计/机器学习 Python Pandas

我有个dataframe,叫做df,我现在想往df1里插入一列数据,数据我已经有了存在numpy.array里,列名可以叫做'flag',怎么添加这一列数据到df里呢?


Answer

Answer 1:

一行代码就可以完成

df['flag'] = my_array


Answer 2:


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什么意思?

统计/机器学习 监督式学习 Python

在sklearn里很多模块都看到learning_rate,这个学习率是什么意思?


Answer

Answer 1:

learning rate,学习率,顾名思义就是模型学习训练集的速度,或者说模型被训练的速度。

learning rate越大,训练得越快;反之,越慢。

learning rate通常是针对于基于梯度下降的机器学习模型,具体说来这个学习率就是梯度下降的步长。对于凸优化,一般说来步长越小收敛越慢;对于非凸问题,learning rate就不是那么直截了当的了。选太小了,训练太慢,影响这个模型的进度,选太大了,可能一步跨过去,错过了最优点。

现在有很多模型能够根据数据的特点自动选择学习率。如果你要手动设置的话,根据我个人的经验0.00001到0.1的范围比较常见,有时候你甚至需要通过交叉验证来最后确定学习率。

Answer 2:

就是梯度下降里的步长

仅此而已



Question 1000577: python里什么模块可以计算精度-召回(precision-recall)的AUC?

统计/机器学习 Python 损失函数

python里什么模块可以计算精度-召回(precision-recall)的AUC?


Answer

Answer 1:

使用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

Answer 1:


>>> df_combine = pd.concat([df1, df1], ignore_index=True)



Question 1000584: sklearn.cluster.KMeans用的哪种距离?

统计/机器学习 无监督学习 Python

sklearn.cluster.KMeans默认用的哪种距离?是欧氏距离吗?KMeans的documentation里也并没有提到如何设置distance的种类。不知道能不能用其他距离。


Answer

Answer 1:

sklearn中用的是欧几里得距离($L_2$范数),而且也不能设置为其他距离。


SpectralPython里的KMeans模块可以用欧几里得距离或者曼哈顿距离($L_1$范数)。




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

Answer 1:

这个不是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

Answer 1:

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



Answer 2:

对于一个k元分类

probas = clf.predict_proba(test)

probas是一个k列的array

probas[:, j]这一列是每个test样本为j的概率。

probas[i, j]是预测第i个样本的标签为j的概率。




Question 1000612: python里怎么实现t-SNE降维?

统计/机器学习 数据降维 Python

python里怎么实现t-SNE降维?


Answer

Answer 1:

万能的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

Answer 1:

pandas里有fillna

df['my_col'].fillna(0, inplace=True)

Question 1000631: dataframe每行或者每列中缺失值(na, nan, null)的个数

统计/机器学习 数据预处理 Python

根据常用的缺失值的处理方法,我想先看看我的df里每行和每列缺失值的个数?这个在python或者pandas里有没有快捷地数个数的方法?


Answer

Answer 1:

返回每行缺失值的总数

df.isnull().sum(axis=1)

返回每列缺失值的总数

df.isnull().sum(axis=0)
Answer 2:


>>> 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中计算加权平均

统计/机器学习 Python

python里如何计算加权平均?

比如我有两个list

value = [1, 2, 3, 4]

weights = [0.1, 0.4, 0.3, 0.8]

value和weights是一一对应着的。除了跑循环,有什么现成求加权平均的吗?




Answer

Answer 1:

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

Answer 1:

重新赋值pandas.DataFrame.index即可。

df1.index = range(len(df1))


Answer 2:


>>> df1.reset_index(drop=True, inplace=True)



Question 1000668: python怎么读取txt格式的数据文件?

统计/机器学习 Python I/O

请问,python怎么读取txt格式的数据文件?


Answer

Answer 1:

最方便的是用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

Answer 1:


>>> 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

Answer 1:

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的数值。


Answer 2:

写个循环就搞定了

for my_score in [score1, score2, score3, score4]:

        print cross_val_score(clf, X, y, my_score)


Question 1000698: python怎么画excel里那种双y轴的图?

统计/机器学习 数据可视化 Python

python怎么画excel里那种双y轴的图?类似这样的,左边和右边各一个纵轴




Answer

Answer 1:


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

Answer 1:

遇到了这个问题,我的loss值最开始是在比较大的值上一直无法收敛,查看网络权值梯度,最开始的梯度返回已经是e-3级别了,因此网络基本没调整。

目前知道的方法有:

初始化不对,查看每层网络的输入方差,如果方差越来越小,可以判定为初始化不对,而你的初始化也是采用的基本的高斯函数,有很大可能是初始化的问题;

采用BN(批量标准化),可以稍微降低初始化对网络的影响;

如果你有更好的办法,求告知。

Answer 2:

好长好长的code。我没有逐行看,但是有几个可能性:

1、你的预测输出标签,而不是概率。如果你的数据是非常倾斜,1:20什么的,基本上不管怎么预测,预测标签都会是0。

2、你的bias项一直都是0,tf.Variable(tf.constant(0.0, shape=[self.num_hidden]))。这也许是一个可能。

3、你的模型层数比较多,激活函数都是一样的。可以试试两层、三层的,效果如何。也可以换个激活函数试试。


Answer 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

Answer 1:

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

Answer 1:

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

Answer 1:

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里的那种数据透视表?

统计/机器学习 Python

python里有没有类似excel里的那种数据透视表?


Answer

Answer 1:

万能的pandas里有数据透视表的,叫做pandas.pivot_table.




Question 1000737: python里怎么做分位数回归(quantile regression)?

统计/机器学习 回归分析 Python

python里怎么做分位数回归(quantile regression)?有现成的包吗?似乎sklearn里并没有。


Answer

Answer 1:

可以参考statsmodels模块中的QuantReg

使用方法和R里面的lm差不多,用y ~ x1 + x2这种方式表示输入变量。

链接里有具体的例子。




Question 1000759: tensorflow里面怎么自定义一个loss function?

统计/机器学习 Python 损失函数 TensorFlow

我的模型的loss function是自己设计的,有没有人了解tensorflow里面怎么自定义一个loss function?


Answer

Answer 1:

有两个办法:

其一、你自己用C++写一个。你需要把tensorflow的源代码下载下来,然后自己用C++写一个函数。可参考Adding an op

其二、你把你自己定义的损失函数用tensorflow中的标准函数表示出来。比如你需要MSE(虽然这个已经有了),可以写成

loss = tf.reduce_mean(tf.square(tf.sub(y_real, y_pred)))



Answer 2:

比如说你有一个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

Answer 1:

我自己搞明白了

import sys
print(sys.getsizeof(df) / 1024.)

这个的结果就是df占了多少kb


Answer 2:

试试

df.info()

最后一行会返回df的大小

或者试试

print(df.memory_usage().sum() / (1024 ** 2), "MB")

得到的是dataframe所占的空间有多少mb


Question 1000816: python直方图y轴显示占比,而不是绝对数值

统计/机器学习 数据可视化 Python

python里面(pyplot)怎么画直方图可以让y轴显示百分比,而不是绝对的数值统计?

我现在是直接用ply.hist,得到的是长下面这样的

我希望y轴显示的是百分比,比重之类。

谢谢!



Answer

Answer 1:


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

Answer 1:


>>> import numpy as np
>>> a + (b - a) * np.random.rand(m, n)



Question 1000835: python numpy里array和matrix的区别?

统计/机器学习 Python

python numpy里array和matrix有什么区别,感觉matrix没什么用,一般都是用array


Answer

Answer 1:

长话短说,是的,numpy里的matrix的确比较鸡肋。

一句话,尽量只用array,不用matrix

理由主要是两个:一、matrix是array的子类,也就是说它们是非常相似的;matrix是限于2维,array则可以是2维,也可以是更高维。二、很多函数、或者其他库里的函数,返回的形式也常常是array而不是matrix。



Question 1000836: pandas DataFrame去掉重复的行

统计/机器学习 Python

有没有什么好的方法可以去掉pandas DataFrame中重复的行?


Answer

Answer 1:
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

Answer 1:

你试试reg = XGBRegressor(seed=99)

版本问题,老版本里只有seed,新版本里random_state和seed都有。但是本质上它们都是在设置随机种子。



Question 1000846: 将pandas.DataFrame中的-1全部换成0

统计/机器学习 Python

除了循环之外有没有什么好方法可以达到快速替换的效果?


谢谢!



Answer

Answer 1:

pandas自带的replace。(文档

>> df.replace(to_replace=-1, value=0, inplace=True)

或者

>> new_df = df.replace(to_replace=-1, value=0)




Question 1000852: python里怎么把中文字符串转化为成list

统计/机器学习 自然语言处理 Python

python里怎么把中文字符串转化为成list?

比如我有string = '机器学习',我怎么可以得到

list_string = ['机', '器', '学', '习']?


Answer

Answer 1:

我一般是先decode再encode

>>> string = '机器学习'
>>> list_string = map(lambda x: x.encode('utf-8'), string.decode('utf-8'))
>>> for i in list_string:
            print i
机
器
学
习
Answer 2:

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

Answer 1:


>>> 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

Answer 1:


df.index.name = None

或者

del df.index.name


Answer 2:

我记得设置的时候是index.col=字符串,换成none或者false试试


Question 1000866: 引用报错ImportError: No module named stats

统计/机器学习 Python

我想用python里的stats包,总是报错,ImportError: No module named stats


有人用过这个吗?




Answer

Answer 1:

stats是scipy的子模块,所以应该是

>>> from scipy import stats



Question 1000873: pandas怎么读入tsv格式的数据

统计/机器学习 数据预处理 Python I/O

是用pd.read_table还是pd.read_csv?我试了两个,都出错了。

谢谢!



Answer

Answer 1:


>>> import pandas as pd

>>> data = pd.read_csv('yourfile.tsv', sep='\t')

或者

>>> data = pd.read_table('yourfile.tsv', sep='\t')
Answer 2:

想知道.tsv文件是一种什么文件格式?跟csv有什么差别?


Question 1000891: python如何读取元素中含有逗号的csv文件

统计/机器学习 Python I/O

csv本来就是逗号隔开的,但是有的元素,比如‘2,000’这样的字符串,本身就有逗号在其中,这时候如果用pandas的read_csv()方程来读的话,就会报错。所以请问有没有别的办法能解决这个问题?


Answer

Answer 1:

Python有一个叫csv的包,里面有一个reader() 函数可以处理这个问题。 

假设我有这样一个csv文件,可以看到第一列第二行数据出了问题

如果用csv这个包的话,问题可以很容易得到解决

在读取出文件以后,楼主可以根据自己的实际情况将列表转换成需要的格式。


Question 1000912: 行数很多的pandas DataFrame如何在jupyter中完整显示?

统计/机器学习 Python

我的dataframe有好几百行,在jupyter中print dataframe的时候,中间很多行都省略了(显示一坨省略号),有什么办法可以让它们完整显示出来吗?



Answer

Answer 1:

这样DataFrame可以显示1000行

pd.set_option("display.max_rows", 1000)

如果要恢复默认设置

pd.reset_option("display.max_rows")


Answer 2:


import pandas as pd

pd.options.display.max_rows = 300
Answer 3:

显示所有行

pd.set_option('display.max_rows', None)

显示所有列

pd.set_option('display.max_columns', None)

这是一个非常危险的操作,一旦行列数过多,jupyter有非常大的可能会卡死


Question 1000927: 如何安装pytorch

统计/机器学习 深度学习 计算机视觉 Python 人工神经网络

我用的电脑操作系统是macOS Sierra, python用的是Anaconda. 


Answer

Answer 1:

pytorch的官网(www.pytorch.org)上就有安装方法的介绍,如果用conda的话,在命令行(terminal)中输入下面这行代码就能实现安装。

conda install pytorch torchvision -c soumith

Answer 2:

在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

Answer 1:

萝卜青菜各有所爱吧,你要你的林志玲,他要他的许晴。


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')


品种众多,供君选择。


Answer 2:


plt.style.use('ggplot')

用plt.style.use('ggplot')就可以设置画图的风格。其中‘ggplot'就是matplotlib提供的一种画图风格。

使用 print(plt.style.available) 就可以看到所以可以使用的画图风格。

总的来说,这些可设置的画图风格都比matplotlib默认的会显得更好看更专业一些。

下面两幅图分别是使用了ggplot的风格和matplotlib默认的风格的柱状图的对比。



Question 1000932: python的dataframe如何重新排列行或者列

统计/机器学习 Python

比如说我有这样一个dataframe


我想调换这四列的顺序,这怎么样简单地做到呢。



Answer

Answer 1:

可以使用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

Answer 1:

我以前遇到过这个。是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

Answer 1:

sns.plt.show()似乎不可以,也许是版本的问题。不过下面的code应该是可以的。

import seaborn as sns

import matplotlib.pyplot as plt



sns.barplot([1, 2, 3], [2, 3, 4])

plt.show()


Answer 2:

我自己查到了

sns.plt.show()就可以了



Question 1000975: pandas读取csv中指定的某些列

统计/机器学习 Python I/O

我有个很多很多列的csv文件,但是我只需要读取其中几列,比如id,age,gender,有什么方法吗?



Answer

Answer 1:

设置参量usecols=['id', 'age', 'gender']

d = pd.read_csv('your_file_name.csv', usecols=['id', 'age', 'gender'])

同样适用于pd.read_table


Answer 2:


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

Answer 1:

(counts, bins, patch) = plt.hist(data, bins=5)

counts 返回 每个bin里元素的数量

bins 返回 每个bin的分界线

patch不用管它



Question 1000994: pandas读取文件的前几行

统计/机器学习 Python I/O

我只想读取少量的行数,看看数据和表格大概长什么样,pandas有什么方法可以做到吗?

谢谢!



Answer

Answer 1:

设置nrows=10, 读取前10行

d = pd.read_csv('data.csv', nrows=10)

Question 1000999: python里有什么package和R里的ggplot类似?

统计/机器学习 开放问题 数据可视化 Python

python里有什么package可以画图好看点,最好最好和R里的ggplot类似?



Answer

Answer 1:

ggplot2有python的移植:ggplot|home

Answer 2:


import matplotlib.pyplot as plt

plt.style.use('ggplot')


这个能达到类似的效果



Question 1001002: sklearn的模型如何保存下来?

统计/机器学习 Python I/O

sklearn训练好的模型,有什么方法可以以某种文件的形式保存下来?以后用的时候就不需要在train fit了,直接读取模型,然后predict。



Answer

Answer 1:


#保存

from sklearn.externals import joblib

joblib.dump(model, 'path/to/my_model.pkl')

#读取

model = joblib.load('path/to/my_model.pkl') 


参阅: Model persistence

Answer 2:

也可以直接用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

Answer 1:


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

Answer 1:

因为对于线性回归来说,stack是没有意义的,这里的gblinear的意思实际上就是用sgd的迭代方法来训练一个LASSO线性模型。此时基于gblinear的xgboost就没有真正的‘boost’,只是一个用sgd求解的普通线性模型。


也可以参考xgb的作者陈天骐在这个问题里二楼的回应。


Answer 2:

该回答是错误的。请看abuu同学的解答。

原帖内容:

—————————————————————————

boosting不是一种具体算法,而是一种通过加权来结合弱分类器,实现强分类的一种思想。xgboost是对其中boosting家族中gradient boosting算法的优秀实现。线性回归模型当然可以作为gradient boosting的一种弱分类器。



Question 1001023: python里Z-score和P-value相互转换

统计/机器学习 假设检验 概率分布 Python

python里有没有类似正态分布表的函数?

最好是能有从Z-score到P-value的函数,和P-value到Z-score的函数。

比如

z_to_p(1.96) = 0.05

p_to_z(0.05) = 1.96


Answer

Answer 1:

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

Answer 1:

最简单的方法是list(df)


Answer 2:


df.columns.tolist()



Question 1001025: 如何重命名pandas的dataframe的列名

统计/机器学习 Python

如题


Answer

Answer 1:

如果需要重命名所有的列,可以重新给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即可。


Answer 2:

pandas.DataFrame更改列名

也可以参考这个。


Question 1001028: 用pandas处理一个很大的DataFrame时如何节省内存

统计/机器学习 开放问题 Python

我电脑是8g的内存,在用pandas处理一个将近5g的csv文件时,虽然能够读取这个文件,但是在后续分析中很容易出现memory error。请问有什么简单的方法能够压缩这个表格,从而节省内存


Answer

Answer 1:

1. 浮点数(float)降低精度或者转成整数(int)。

浮点数转整数这很好理解。

以numpy为例,浮点数有以下几种精度,float16, float32, float64, 并且默认的精度是float64。但是通常情况下float32,甚至float16的精度就已经足够了,所以可以用array的astype函数将float64转成float16或32.


2. 将字符串的类别变量转换成整数。

字符串占的内存比数字要大很多,所以要尽量用整数来替换字符串。比如我有一个叫“country“的列,它的值有'China', 'USA', 'Italy', 那么我可以用一个map把这三个值分别映射到1,2,3。这样也可以节省内存。



Answer 2:

转换数据的类型,比如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

Answer 1:

没这个功能吧,随机森林的性质本来就是每棵决策树等权重的。

如果权重不等,那就成boosting了。


Answer 2:

随机森林是等权重的投票算法,所以题主需要的功能是无法达成的。



Question 1001042: 可视化sklearn决策树的结构

统计/机器学习 监督式学习 数据可视化 Python

我用sklearn构造了决策树模型后,可以有办法得到这个决策树的结构?也就是if-else的判断的规则。

Thx!



Answer

Answer 1:

用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


Answer 2:

需要通过调用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

Answer 1:

应该是字符encoding的问题

试试

dataset.to_csv('data_set.csv', encoding='utf-8)



Question 1001049: python里有现成的卡尔曼滤波器的包吗?

统计/机器学习 时间序列 开放问题 Python

正在做一个和时间序列相关的项目,想试试卡尔曼滤波器(Kalman filter)。

python里有现成的卡尔曼滤波器的包吗?

谢谢!



Answer

Answer 1:

可以试试filterpy或者pykalman

我用过filterpy。


Answer 2:

filterpy不错

对应的还有一本很长的教程https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python

我没读完,楼主有兴趣可以看看



Question 1001052: pandas把一列日期转换为星期

统计/机器学习 数据预处理 时间序列 Python

DataFrame有一列是日期,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

Answer 1:


>> data['date'].dt.dayofweek

0    6

1    0

2    1

Name: date, dtype: int64

从0开始计数,0代表礼拜一,6是礼拜天。


Answer 2:

直接用pandas内置的也可以


test['date'].dt.weekday


Answer 3:

我一般用这个

data['date'].apply(lambda x: x.weekday())



Question 1001055: sklearn有没有生成混淆矩阵的函数?

统计/机器学习 模型验证 Python 损失函数

sklearn中(或者说python中其他模块)有没有可以直接生成混淆矩阵的函数?



Answer

Answer 1:


from sklearn.metrics import confusion_matrix

confusion_matrix(y_true, y_pred)



Question 1001058: 查看sklearn的线性回归系数的p value

统计/机器学习 假设检验 回归分析 Python

不管是逻辑回归也好,线性回归也好,sklearn的线性模型只能查看每个变量的系数,有没有什么方法也可以像R里面那样查看系数的p value和显著性?

谢谢!



Answer

Answer 1:

可以用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


Answer 2:

sklearn不支持查看系数的p-value,可以参考statsmodels模块。



Question 1001063: python求logloss

统计/机器学习 监督式学习 Python 损失函数

python里有现成可以求二元分类的logloss的函数吗?

谢谢!



Answer

Answer 1:


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

Answer 1:

目前还没有。

不过。

在山的那边,海的那边,有一群勤劳的程序员,他们正在讨论在新版本的sklearn里增加post-prune。


链接在此

https://github.com/scikit-learn/scikit-learn/issues/6557

Answer 2:

sklearn目前没有具体实现剪枝的功能。

现在能做的是预剪枝,就是设置Classifier或者Regression里的参数max_depth, min_samples_split, min_samples_leaf。

后剪枝的确是在sklearn中做不到的。


----------补充-----------

什么是预剪枝,后剪枝?

Answer 3:

当然有,这个是针对sklearn的决策树进行剪枝的完整代码和解析

https://blog.csdn.net/appleyuchi/article/details/83692381


Question 1001079: sklearn predict的默认阈值

统计/机器学习 监督式学习 Python

sklearn里的predict_proba很好理解,是返回的概率。

predict是返回的分类的结果,我想知道的是默认阈值是多少?

比如说,概率大于x,返回1,概率小于x,返回0。这个阈值x在sklearn中是多少?

补充:如果是多元分类的话,那么阈值是多少?




Answer

Answer 1:

对于二元分类,阈值是0.5

对于多元分类,predict是返回概率最大的那个标签


Answer 2:

0.5



Question 1001091: python中实现柯尔莫可洛夫-斯米洛夫检验(K-S test)

统计/机器学习 假设检验 概率分布 Python

我想用柯尔莫可洛夫-斯米洛夫检验(K-S test)来比较两个分布,python里该用什么包里的什么函数呢?

3Q3Q



Answer

Answer 1:

可以用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

Answer 1:

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])


Answer 3:

可以使用flattenravel两个函数,区别可以看看下面代码,根据你的需求进行选取

>>> 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]])


Answer 4:


a.reshape(1, -1)[0]

Question 1001105: python里怎么求多元分类的F1 score?

统计/机器学习 模型验证 Python

大家好,python里怎么求多元分类的F1 score?

谢谢!



Answer

Answer 1:

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是什么意思?

统计/机器学习 监督式学习 Python

SGDClassifier里有个partial_fit的方法,这个和普通的fit方法有什么区别?



Answer

Answer 1:

在第一次训练时,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)


Answer 2:

fit就是一次性把模型训练完毕

partial_fit可以在原来的基础继续训练模型,所以partial_fit只针对对onlin的算法。这里SGD就是online的。


Answer 3:

那除了sgd以外,还有什么可以使用`partial_fit`这个方法吗


Question 1001113: 把pandas.DataFrame中所有行全部随机排列

统计/机器学习 Python

我有个DataFrame,有什么办法可以把其中的行打乱,随机重新排列的,谢谢!



Answer

Answer 1:

pandas的dataframe有自带的sample功能,当设参数frac=1的时候,就相当于对行做shuffle

df = df.sample(frac=1)


如果重新排列之后希望index还是从0开始排序的话,可以这样操作

df = df.sample(frac=1).reset_indedx(drop=True)



Answer 2:

用np.random.permutation构建一个随机序列,作为index来对df进行shuffle处理 

from np.random import permutation
idx = permutation(len(df))
df[idx]


Answer 3:

随机重排的属于叫做shuffle,也就是“洗牌”。

sklearn里有洗牌的函数。

from sklearn.utils import shuffle

df = shuffle(df)



Question 1001129: xgboost可以用sklearn里的GridSearchCV吗?

统计/机器学习 模型验证 Python

如果想对xgboost调参,可以用sklearn里的GridSearchCV吗?



Answer

Answer 1:

当然可以的。

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。

Answer 2:

可以用GridSearchCV,前提是必须要用xgboost的sklearn api。

如果用xgb booster的话,就不能用了。


Question 1001130: python里有没有类似matlab里linspace的功能?

统计/机器学习 Python

range(k)只能生成整数,不能产生小数的等差数列。请问python里有没有类似matlab里linspace的功能,可以生成等差小数的数列?



Answer

Answer 1:

numpy实现了很多类似matlab的功能,也包括linspace

import numpy as np
np.linspace(0, 2, 5)

可以得到 array([ 0. , 0.5, 1. , 1.5, 2. ])


Answer 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环境下给曲线下方的面积涂色?

统计/机器学习 数据可视化 Python

matplotlib.pyplot环境下如何给曲线下方的面积涂色?

比如下面的plot,怎么把曲线和x轴之间的面积填充颜色呢?



Answer

Answer 1:

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是什么意思

统计/机器学习 模型验证 Python

GridSearchCV中有个参数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

Answer 1:

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

Answer 1:

你需要安装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相似

统计/机器学习 推荐系统 描述性统计 Python

python里怎么计算jaccard相似



Answer

Answer 1:

根据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


Answer 2:

sklearn里也有jaccard

文档见这里

但是要求数据进行过encode处理,而且两个数组的长度也必须一样。




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

Answer 1:

这个我知道,的确有点小奇葩。。。

你需要确保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

Answer 1:

取整的方法有很多,比如另外一个答案里的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.]])


Answer 2:


s = s.astype(np.int)



Question 1001179: plt.scatter plot怎么让不同的类别有不同的颜色

统计/机器学习 数据可视化 Python

如果我用python的pyplot画散点图,怎么可以让不同的类别显示不同的颜色,效果大致如下(网图)

谢谢!



Answer

Answer 1:

可以用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()


Answer 2:


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

Answer 1:


s = '余悲之 且曰 若毒之乎'

print s.count(' ')


Answer 2:


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,也就是空格的个数。


Answer 3:

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

Answer 1:

感觉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参数的意义

统计/机器学习 Python

python机器学习模块sklearn里很多模型都有random_state这个参数,这个参数具体什么意思?有什么作用?

当我们调参的时候需要调这个random_state吗?


Answer

Answer 1:

random_state就是随机seed,随机种子。因为sklearn中很多算法都含有随机的因素,为了进行可重复的训练,我需要固定一个random_state。


调参的时候是不需要调random_state,相反的是,我们应该先固定random_state,然后再对模型进行调参。


Answer 2:

很多模型都需要一个随机的设定(比如迭代的初始值等等)。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

Answer 1:


df.loc['CH'] = ['中国', '2']



Question 1001217: sklearn朴素贝叶斯分类里GaussianNB和BernoulliNB的区别?

统计/机器学习 贝叶斯 监督式学习 Python

sklearn提供了好几种朴素贝叶斯分类器,其中包括GaussianNB和BernoulliNB。

这两个有什么不同?有什么不同的使用场景?



Answer

Answer 1:

这几个都是naive bayes的模型,区别主要在于特征的分布。


如果特征是数值的,最好是正态分布的数值的,那么用

sklearn.naive_bayes.GaussianNB

如果特征是binary的,那么用

sklearn.naive_bayes.BernoulliNB

如果特征是categorical的,那么用

sklearn.naive_bayes.MultinomialNB


Answer 2:

看你的特征的条件概率符合哪种分布,正态分布还是二项分布。


Question 1001221: python里计算百分位数

统计/机器学习 描述性统计 Python

给定一个array或者list,怎么计算百分位数?

谢谢!



Answer

Answer 1:

如下可以得到data中25百分位数,50百分位数和75百分位数

import numpy as np

np.percentile(data, [25, 50, 75])


Answer 2:

用scipy也可以

>> from scipy.stats import scoreatpercentile

>> scoreatpercentile(range(200), per=[90, 10])

[ 179.1   19.9]

参数per就是你想得到的百分位,返回的是对应的百分位数。



Question 1001225: sklearn计算MAPE

统计/机器学习 模型验证 Python

sklearn里有没有直接计算MAPE(平均百分误差)的函数?

谢谢各位!



Answer

Answer 1:

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可以做回归预测吗?

统计/机器学习 回归分析 Python

xgboost可以做回归预测吗?



Answer

Answer 1:

当然可以啊,决策树能做回归

随机森林自然就可以做回归

然后,boosting也就可以做回归

那么,xgboost当然可以做回归

Answer 2:

可以。不仅可以,而且效果也很牛

参考xgboost回归模型-SofaSofa数据竞赛


Question 1001242: 由均匀分布生成标准正态分布

统计/机器学习 概率论 概率分布 Python

上周一道面试题,给你一个0到1的均匀分布,如何近似地生成一个均值为0,标准差为1的标准正态分布。并且用python实现。

也就是说你只能用numpy.random.uniform()这个函数,然后通过自己的一些算法,得到numpy.random.normal()。


已经挂了,但求思路!


Answer

Answer 1:

这个面试的考点就是中心极限定理和均匀分布吧。一组随机变量的均值符合正态分布。

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.


Answer 2:

让我来静静地装个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变换。


Answer 3:

iid = (np.mean(np.random.uniform(0,1,n))-0.5)*np.sqrt(12*n)



Question 1001248: python里怎么画QQ图?

统计/机器学习 假设检验 概率分布 数据可视化 Python

python里怎么画那种检验正态分布的QQ图?谢谢!



Answer

Answer 1:

如果是要检验是否为标准正态分布

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里怎么实现柱状图?

统计/机器学习 数据可视化 Python

python里怎么实现柱状图?

比如我有个数据

年份    数量

2010    10

2011    15

2012    20

    ...

我希望得到的是一个柱状图,横轴是年份从2010开始,纵轴是数量。


谢谢!



Answer

Answer 1:

用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

Answer 1:

试试下面这个

import re

print(re.sub("[\s+\.\!\/_,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*():]+".decode("utf8"), "".decode("utf8"), s.decode("utf8")))


Answer 2:

可以直接用正则表达式

import re



s = ' 文本聚类:使用聚类方法,对词汇,片段,段落或文件进行分组和归类。'

print(re.sub('\W', '', s))
Answer 3:

可以用python的正则表达



Question 1001291: pytorch 的交叉熵损失总是报错,同样的结构改成MSELoss就没有问题

统计/机器学习 深度学习 Python 人工神经网络

pytorch 的交叉熵损失总是报错,同样的结构改成MSELoss就没有问题,谁能告诉我怎么回事呀

loss_function = torch.nn.CrossEntropyLoss()

TypeError: FloatClassNLLCriterion_updateOutput received an invalid combination of arguments


这是报错截图



Answer

Answer 1:

不知道你整个代码,但是也许是你的目标值的tensor type的问题吧

你试试把你的tensor转成longtensor的类型,比如

my_target = Variable(torch.LongTensor([1]))



Question 1001295: keras中怎么增加Leaky relu的激活层

统计/机器学习 Python 人工神经网络

在keras中怎么增加一个Leaky relu激活函数的隐藏层?



Answer

Answer 1:

比如这样

model = Sequential()

model.add(Dense(512, 512, activation='linear'))

model.add(LeakyReLU(alpha=.001))


Answer 2:


from keras import layers

...

model.add(layers.LeakyReLU(alpha=0.1))

Question 1001297: python里用F检验来比较方差

统计/机器学习 假设检验 Python

python里怎么用F检验来比较两个样本的方差?



Answer

Answer 1:

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%的列

统计/机器学习 数据预处理 Python

我参考了缺失值的处理方法,想把我数据中缺失值多于50%的列从DataFrame里去掉。

请问pandas中有相关的实现方法吗?



Answer

Answer 1:

我写了个函数

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是什么意思?

统计/机器学习 监督式学习 Python

xgboost中的参数min_child_weight是什么意思?



Answer

Answer 1:

它是指生成一个子节点所需要的最少样本权重。

如果新生成的子节点上的样本权重小于你指定的数,那么这个子节点就不会生长出来。

如果每个样本的权重都是相等的(=1),那么min_child_weight其实就相当于random forest或者decision tree里的min_samples_leaf,也就是产生一个新的子节点所需要的样本数量。

min_child_weight可以看作是一种样本数量的加权和。



Question 1001313: sklearn里怎么做多项式回归?

统计/机器学习 回归分析 Python

sklearn里怎么做多项式回归?搜了一下,感觉里面没有现成的多项式回归。



Answer

Answer 1:

可以参考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是回归系数,按照幂次先高后低排列。


Answer 2:

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)


Answer 3:

这个问题不是编程的问题,而是统计学中的本质问题,在统计理论中,对非线性回归模型,比如多项式、logsitic回归、对数回归等等,都可以转化为线性回归模型来求解的

所以,这个不是现有程序的问题,而是基本思想的问题


Question 1001323: 怎么用numpy生成一个三维的tensor?

统计/机器学习 Python

numpy array可以生成一个矩阵,那么怎么用numpy生成一个三维的tensor?


Answer

Answer 1:

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

Answer 1:


df.sort_values(by=['a' ,'b'], ascending=True, inplace=True)



Question 1001330: sklearn模块有神经网络的类可以调用吗?

统计/机器学习 Python 人工神经网络

sklearn模块有神经网络的类可以调用吗?想要试一试



Answer

Answer 1:

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

Answer 1:

在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

Answer 1:


df.to_csv('your_file.csv', mode='a', header=False)

a是append的意思,就是追加在原文件的后面



Question 1001348: 可视化K Means的时候怎么把聚类的中心点和样本点连起来?

统计/机器学习 无监督学习 数据可视化 Python

K Means每个聚类都有个中心点,有没有什么方法可以把中心点和归属它的样本点连起来?


我在网站上看到的示意图如下


请问python里可以实现吗?我试了matplotlib.pyplot的scatter散点图,但是它不能画连线,只能标出散点。

谢谢!



Answer

Answer 1:

其实也不一定非要用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算法了吗?

统计/机器学习 监督式学习 Python

sklearn实现adaboost算法了吗?如果有的话,如何调用呢?

谢谢!



Answer

Answer 1:

当然有的!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

Answer 1:

是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

Answer 1:

估计是port被占用了,不知道是不是前面的进程出了问题,试试把threads数量调小点,然后读个小数据试试。



Question 1001377: python里有没有huber loss的线性回归

统计/机器学习 回归分析 Python 损失函数

python里有没有huber loss的线性回归的package?


Answer

Answer 1:

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

Answer 1:

补充一个来自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]



Answer 2:

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

Answer 1:

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

Answer 1:

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()


Answer 2:

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

Answer 1:

需要用到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()  
得到图形为:

Answer 2:

用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?

统计/机器学习 时间序列 开放问题 Python

python中有哪些关于隐马尔可夫模型(HMM)的package?

避免自己重复造轮子(其实想造也造不出),问问有没有现成的。


Answer

Answer 1:

前几天在折腾贝叶斯网络的时候刚好发现一个包pomegranate(http://pomegranate.readthedocs.io/en/latest/HiddenMarkovModel.html#hiddenmarkovmodel),好像支持隐马尔可夫模型的拟合还有预测的样子,楼主看看是不是你想要的。

Answer 2:

试试hmmlearnpymc



Question 1001410: plt.plot作图,隐藏坐标轴

统计/机器学习 数据可视化 Python

用plt.plot作图怎么可以让坐标轴隐藏,或者去掉不显示?

plt.plot(a, b)

plt.show()

比如上面这个图是有坐标轴的,我是想去掉坐标轴



Answer

Answer 1:

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

Answer 1:


df = DataFrame(cnts.items(), columns=['key', 'cnt'])


Answer 2:


df = pd.DataFrame.from_dict(cnts, orient='index').reset_index()
df.columns = ['key', 'cnts']




Question 1001435: 如何利用python画分类器的ROC曲线?

统计/机器学习 监督式学习 模型验证 Python

已经预测值和真实标签,如何利用python画分类器的ROC曲线?



Answer

Answer 1:


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

Answer 1:

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])


Answer 2:


>>> 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

Answer 1:

要在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

Answer 1:

如果你对原先的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


Answer 2:

尝试用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

Answer 1:

设置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 数据竞赛

我想知道在python里有什么方法可以让numpy array(数值矩阵)转为图片并且显示?

就好比这个数据竞赛里的两个图片

就是根据两个40乘以40的numpy array得到的图片



Answer

Answer 1:


# 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))


Answer 2:


import matplotlib.pyplot as plt

plt.imshow(my_figure, cmap=plt.cm.binary)

plt.show()



Question 1001472: python做图自定义背景色

统计/机器学习 数据可视化 Python

用python的matplotlib做图,怎么把背景色改成自定义的背景色?类似下图这样



Answer

Answer 1:


# 设置背景色为粉色

plt.rcParams['axes.facecolor'] = 'pink'

# 作图

plt.plot([0, 2], [2, 3])

# 显示

plt.show()



Question 1001487: sklearn.preprocessing.StandardScaler采用的是哪种标准化的方法?

统计/机器学习 数据预处理 Python

sklearn.preprocessing模块提供了一个内置的特征标准化的函数StandardScaler


它具体是采用的哪种标准化的方法或者形式?



Answer

Answer 1:

在默认的情况下 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 人工神经网络 TensorFlow

tensorflow里经常出现strides这个参量(比如tf.nn.max_pooltf.nn.conv2d),这个参量是什么意思?如何理解?



Answer

Answer 1:

一般理解为步长、跨度或者步幅。稍微具体一点说就是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

Answer 1:

先把它转为时间对象

df['time'] = pd.to_datetime(df['time'])

然后再对time这列排序

df.sort_values('time', inplace=True)



Question 1001529: python中实现k-modes的包

统计/机器学习 无监督学习 Python

sklearn里好像没有实现k modes,请问有其他package里有k modes算法吗?谢谢!



Answer

Answer 1:

请参考这个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里画出“热图”

统计/机器学习 数据可视化 Python

python里怎么画“热图”?

像下面这样的

图是网上的,请无视坐标轴,我就是想实现热图的效果



Answer

Answer 1:

用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()


Answer 2:

使用seaborn 中的heatmap来画,

seaborn是画图的库,比matplotlib.pyplot高级,易用一些。

Answer 3:


import matplotlib.pyplot as plt

import numpy as np



a = np.random.random((16, 16))

plt.imshow(a, cmap='hot', interpolation='nearest')

plt.show()

效果如下


Answer 4:



pyecharts可以画出比较漂亮的图,而且是可以交互的下面是官方文档

官方文档


Question 1001554: 如何复制一个pandas DataFrame

统计/机器学习 Python

Pandas中很多操作都是“传址”的,也就是说

# 比如有一个dataframe df1

# 把df1赋值到df2

df2 = df1



# 对df2中的一些元素进行操作

# 发现df1也跟着变了

怎么复制一个dataframe的数值,对新的df进行修改,不会影响到原来dataframe。


谢谢!




Answer

Answer 1:

这个很简单啊

df2 = df1.copy()



Question 1001557: 提取sklearn逻辑回归的模型系数

统计/机器学习 回归分析 监督式学习 Python

比如我用sklearn.linear_model.SGDClassifier做了一个逻辑回归,怎么能够提取出这个逻辑回归中各个特征的回归系数?以及截距?

谢谢!



Answer

Answer 1:


from sklearn.linear_model import SGDClassifier

clf = SGDClassifier()

clf.fit(X, y)


#得到回归系数

coefs = clf.coef_


#得到截距

intercept = clf.intercept_



Question 1001559: from __future__ import division是什么意思

统计/机器学习 Python

python代码头部经常出现的

from __future__ import division

是什么意思?



Answer

Answer 1:

python里的除号/是默认是整除

>>> 3 / 2

1

加上了上面那一段,除号/就变成了正常的小数除法了

>>> from __future__ import division

>>> 3 / 2

1.5


Answer 2:

python3里不需要了,因为除法自然就是得到小数的

Answer 3:

这段代码的意思就是在使用Python2的时候把高版本的Python3的特性引进当前版本中。


Question 1001561: DataFrame批量修改列名

统计/机器学习 Python

最近在用python学习做统计   想将基础的统计方法集成到一个软件中  比如将GLM,多因素方差分析放到一个软件里  这

样下次使用的话直接用就可以了  不必再重新去写  但是我在做多因素方差分析的时候发现了很大的问题  就是怎么将一个csv文件的每一列都单独加一个列名    有么有大神会  求指教   

                                                                                                    谢谢


Answer

Answer 1:

不大明白你的意思和销魂的换行,哈哈哈

你是批量修改一个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: 多因素方差分析

统计/机器学习 假设检验 Python

想使用python去做一个可以对任意csv文件都可以去做方差分析的程序     看了网上的各种教程  发现如果想要使用scipy和statsmodels中的anova_lm去做的话   好像必须要确定每一列 的列名才可以去做   求大神指教 再有其他的包么   还是有其他的方法去做    谢谢


Answer

Answer 1:

emmmm 用pandas读取csv 之后用columns属性 得到包含所有列名的列表 就可以了吧

Answer 2:

方差检验,当然还是上spss,利器


Question 1001568: numpy中获得tensor的维数?

统计/机器学习 Python

numpy.array就可以看作是tensor。我想知道怎么获得一个array的维数。比如对于向量,维数是1;对于矩阵,维数是2。


补充一下,我知道my_array.shape。但这个返回的是行数、列数,并不是我说的维数。



Answer

Answer 1:


my_array.ndim

可以返回一个array的dimension的个数


Answer 2:


len(my_array.shape)



Question 1001571: 如何用python实现贝叶斯网络优化lightgbm超参数?

统计/机器学习 贝叶斯 监督式学习 Python

如何用python实现贝叶斯网络优化lightgbm超参数?


Answer

Answer 1:

可以参考这个ppt

讲的就是用贝叶斯方法来调参


Answer 2:


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

Answer 1:


>>> from datetime import date

>>> delta = date.today() - date(2017,1,1)

>>> delta.days
387


Answer 2:


>>> 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

Answer 1:


# 引用numpy模块
import numpy as np

#求数组a的中位数
np.median(a)

#求数组a的四分位数
np.percentile(a, [25, 50, 75])

Question 1001592: matplotlib.pyplot中怎么把legend放到图片外面去?

统计/机器学习 数据可视化 Python

比如下面的图,legend(图例)在图片里面,对图像有遮挡。

怎么设置可以把图例放在图片的外面?



Answer

Answer 1:

试试

plt.legend( bbox_to_anchor=(1,1), loc='center left')


Answer 2:

我都是用

plt.legend(loc=[1, 0])



Question 1001600: python里怎么求一个矩阵的秩?

统计/机器学习 线性代数 Python

python里怎么求一个矩阵或者numpy.array的秩?



Answer

Answer 1:

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

Answer 1:

sequential model就是那种最简单的结构的模型。按顺序一层一层训练,一层一层往前的那种。没有什么环的结构。比如像前馈网络那样。

就像下图这样的,一层层的那种。


Answer 2:

keras中定义模型的方法之一,一层层线性叠加的网络架构。另一种方法是通过函数式API可以构建任意形式的架构


Question 1001611: sklearn里有没有可以求kappa值的?

统计/机器学习 描述性统计 Python

sklearn里有没有可以求kappa值的?



Answer


Question 1001619: MSE问题

统计/机器学习 模型验证 Python 损失函数

有没有人能告诉下MSE在PYTHON中怎么实现吗   最好有代码  小白一只


Answer

Answer 1:

这个挺简单的。

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

Answer 1:


>>> a = np.array([1, 2, 3])

>>> a = a.reshape(-1, 1)

>>> a

array([[1],

       [2],

       [3]])


Answer 2:


row_vec = np.array([1, 2, 3])

col_vec = np.array([row_vec]).T

注意row_vec外面的方括号,必须要有


Answer 3:
.T 反转属性就可以

Question 1001642: matplotlib怎样让grid网格线处于图像下层?

统计/机器学习 数据可视化 Python

上面这个图网格线在bar的上面了,怎么让这个网格线沉到底层去?

谢谢!



Answer

Answer 1:

试试

plt.rc('axes', axisbelow=True)



Question 1001657: python里如何实现线性判别分析(LDA)?

统计/机器学习 监督式学习 Python

请问python里如何实现线性判别分析(LDA)?



Answer


Question 1001659: sklearn里的LabelEncoder什么用?

统计/机器学习 监督式学习 Python

sklearn里的LabelEncoder什么用?很多代码里都有这个。

但是没搞清楚什么作用。已经是label了,为什么还要再encoder?



Answer

Answer 1:

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])


Answer 2:

把一些没什么上下文联系的文本转换成能作为input的数字,不然都没把文本输入到模型里去


Answer 3:

再做特征工程时,我们需要处理已有特征,对于分类特征通常有两种处理方案:

  • 自然数编码

使用sklearn中的LabelEncoder方法,转换为数值型特征

  • 独热编码(one-hot encoding)

生成一个(n_examples * n_classes)大小的0~1矩阵,每个样本仅对应一个label

可以使用pandas中的get_dummies实现


Question 1001667: 怎么在matplotlib.pyplot的plot上加上文字?

统计/机器学习 数据可视化 Python

我不是指加标题或者坐标轴或者图例,我是指在plot上加文字说明,类似于下面这个例子。

这个该如何实现?谢谢!


Answer

Answer 1:

用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

Answer 1:

设置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

Answer 1:

目测是你的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里怎么求移动平均数?

统计/机器学习 描述性统计 Python

pandas里怎么求一个dataframe里一列的移动平均数?

谢谢!



Answer

Answer 1:


moving_mean = df['a'].rolling(window=3).mean()

pandas里的rolling可以用rolling sum也可以rolling mean


Answer 2:

这个问题出现过一次。看这里



Question 1001694: python pandas里有没有类似R的summary的函数?

统计/机器学习 R Python

python pandas里有没有类似R的summary的函数?

可以看到一个dataframe的基本信息,所有列名什么的



Answer

Answer 1:

比如一个pd.DataFrame,变量名为df,可以用df.info()和df.describe()

df.info()返回这个dataframe的基本信息,比如以iris数据集为例,150行,5列,每列的列名等等。

>>> df.info()

df.describe()可以返回每一列更具体的信息,比如均值、方差、四分位等等。

>>> df.describe()


Answer 2:


>>> df.describe()


Answer 3:

可以用head来查看一个dataframe的前几行,你就知道基本信息了

>>> df.head()



Question 1001704: pandas pop KeyError求帮助!

统计/机器学习 Python


LAS = LogisticRegression(penalty='l1', C=1.0, random_state=0)
y_train = train.pop("class_id")
"


明明很简单呀  为什么会出错呢


Answer

Answer 1:

mantora您好,感谢您的提问!为了方便其他朋友更好地理解您的问题,您的标题已经被修改。

--------我试着回答您的问题--------

针对于您的问题,建议你检查class_id两端是否有空格。有时候空格会造成不匹配。


其次一个方法,我注意到class_id是您的第二列,所以可以试试

print(train.columns[1])
y_train = train.pop(train.columns[1])


Answer 2:

建议你看看官方文档

pop一个列,pop完之后这个列就会被删掉。如果pop一个不存在的列,就KeyError。


Answer 3:

你pop之前有这个column吗?因为pop之后,这个column就被删除了,所以你不能反复调用pop这个语句的。



Question 1001712: 如何用python画饼图?

统计/机器学习 数据可视化 Python

如何用python画饼图?最好能是下面这个效果。

谢谢!



Answer

Answer 1:

万能的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()


Answer 2:

如果数据是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

Answer 1:

方法一:

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数据


Answer 2:

如果你需要把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

Answer 1:

设置最多可显示的列数。下面的代码设置最多显示100列。

pd.options.display.max_columns = 100


也可以取消限制,比如设置为None。

pd.options.display.max_columns = None
Answer 2:

转置之后呢


Question 1001850: plt.pie画饼图,怎么调节透明度alpha

统计/机器学习 数据可视化 Python

matplotlib里一般都是用alpha调节图像透明度的。

但是plt.pie(x, alpha=0.5),设置alpha透明度都会报错。

TypeError: pie() got an unexpected keyword argument 'alpha'

有什么好方法可以设置透明度的吗?

谢谢!



Answer

Answer 1:

这个的确没有好的解决方法。

一个比较笨的方法是写一个函数,根据给定的颜色和alpha自动计算出透明化之后的RGB。

可以参考calculate RGB with given alpha



Question 1001857: 求推荐条件随机场(CRF)的python package

统计/机器学习 自然语言处理 开放问题 Python

请求大家推荐推荐关于条件随机场(CRF)的python的包。

最好是稳定的,并且是被持续维护的。谢谢!



Answer

Answer 1:

试试pystruct



Question 1001875: python中可以做beta regression的包?

统计/机器学习 回归分析 监督式学习 Python

需要做一个beta regression,sklearn里没有,statsmodel里也没有找到

问问各位有没有用python做过beta regression的?



Answer

Answer 1:

的确好像没见过beta regression的python包。

搜了一下之后就只发现了这个betareg.py


如果你也会R的话,R里面倒是有library

R packages betareg

以及参考文献


Question 1001899: sklearn.metrics.auc里提到的梯形法则是什么意思?

统计/机器学习 模型验证 Python

sklearn.metrics.auc的官方文档里提到了一个梯形法则,原文如下:

“Compute Area Under the Curve (AUC) using the trapezoidal rule”

请问这个梯形法则是什么意思?用在什么地方?

谢谢!



Answer

Answer 1:

所谓曲线(curve)实际上就是一堆散点,散点下方的面积和就是AUC。

梯形法则,就是说把一个个小面积看作梯形,然后auc就是这些梯形的面积和。

此外还有矩形法则,auc就是矩阵面积的和。

当然,我们肉眼也能判断,梯形法则得到的面积更精确一些。


Answer 2:

梯形法则:百度百科

就是用线性插值法计算面积。



Question 1001921: sklearn算法里输入的数据集是要求pandas.DataFrame还是numpy.array呢

统计/机器学习 Python

sklearn算法里输入的数据集的格式是要求pandas.DataFrame还是numpy.array呢?

还是都可以?



Answer

Answer 1:

两者都可以。

但要注意,输入sklearn 的必须是数值型数据


Answer 2:

一般来说把df格式的转换成矩阵储存形式比较好,这样就能和np的计算函数一起用了,同时的np的array形式可以赋值到dataframe


Question 1001997: xgboost的FIT问题

统计/机器学习 监督式学习 Python

不是很懂这个ERROR什么意思请大神解答一下

TypeError: fit() got an unexpected keyword argument



Answer

Answer 1:

你的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

Answer 1:


>>> from keras.datasets import mnist

>>> (train_images, train_labels), (test_images, test_labels) = mnist.load_data()


Answer 2:

你可以直接到MNIST官方网站下载。

然后再用python读进来。



Question 1002039: 生成两组不独立的标准正态分布随机数

统计/机器学习 概率分布 Python

怎么用python生成两组不独立(相关系数不为0)的标准正态分布的随机数呢?



Answer

Answer 1:

我自己想明白了,应该是直接用多元正态分布比较好

numpy.random.multivariate_normal


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

Answer 1:

n_init就是初始化的次数。

为什么要多次初始化呢?

因为k means无法达到全局最优,每次收敛到最后的结果是局部最优,所以就需要跑很多次独立初始化的k means,比如说n_init=10就是跑10次。然后从这10次里面选最优的那个。

不同初始化只取决于不同的初始点,也就是初始质心。


Answer 2:

k means无法保证收敛到最优解,所以要反复进行,选择当中最优的。

n_init就是重复进行k means的次数。



Question 1002067: matplotlib怎么把图例放到图外面

统计/机器学习 数据可视化 Python

比如我用plt.plot画了下面的图,然后legend会挡住部分图像。

怎么把图例放到图像框的外面?



Answer

Answer 1:

legend里有一个参数是bbox_to_anchor,接受tuple给的坐标,可以指定任意位置

Answer 3:

我都是用

plt.legend(loc=[1, 0])

Question 1002105: python中计算KL divergence

统计/机器学习 概率分布 描述性统计 Python

python中计算KL divergence有什么直接调用的函数吗?

如果没有的话,那就自己手写咯



Answer

Answer 1:

scipy里的entropy实际上就可以计算Kullback–Leibler divergence

>>> from scipy.stats import entropy

>>> entropy(p, q)


Answer 2:

@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

Answer 1:

完全不影响结果,最多影响显示和输出。

用过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

Answer 1:

设置as_index=False就可以了

train.groupby(['is_workday', 'weather'], as_index=False)['y'].mean()

效果如下


Answer 2:

.reset_index()可以不


Question 1002151: mac电脑怎么用ssh远程控制Linux服务器查看可视化结果

统计/机器学习 深度学习 Python 人工神经网络

求助各位大神,我用的是mac本,在用linux服务器跑深度学习的程序,但是不知道怎么看跑出来的学习曲线和各种的图片结果,求助啊!感谢!我只有远程服务器的IP,端口,用户名和密码。


Answer

Answer 1:

那个远程的程序是你自己写的不?如果是的话就方便多啦

我一般都是在程序先写好了代码,自动把图片、数据都存放在服务器的临时文件夹里。跑完之后,把文件(图片、数据)scp回自己的笔记本。用完了之后再把服务器里临时存放的给删掉。



Question 1002162: 请教一下:关于融合stack

统计/机器学习 回归分析 监督式学习 Python 数据竞赛

回归,其实也就是第一个小竞赛。

我直接用单模型跑的,在5kfold,rmse的均值是14.4多。

因为数据过于干净,我试过对分类的数量少的合并,还有对室外和体感做斜率,包括把时间分为工作时间和下班时间,做特征,效果都贼j8差,不如三下五除二的直接fit。排名中等。

于是我就想可能特征已是极限,需要上stack了。

于是我拿rflrgbdtlassolgb等做了一个七列的预测矩阵,把预测矩阵放在xgb下重新训练,

在5折上均值14.9多,也就是这个class瞎忙活了,

真心求教一下,是不是思路错了???



Answer

Answer 1:

室外和体感做斜率是什么意思?



Question 1002163: 远程用linux 跑程序,训练完train的部分后,画图出现问题

统计/机器学习 深度学习 数据可视化 Python 人工神经网络


求助!


Answer

Answer 1:

这种错误

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

Answer 1:

你的目的是?判断下一帧是三种类型的哪一种吗?


Answer 2:

为什么只用初始概率和状态转移矩阵呢?我觉得音频本身的信息更重要啊

把它们的信息结合在一起然后搞个时间序列模型应该是不错的选择



Question 1002178: 如何在numpy array尾部增加一行

统计/机器学习 Python

比如我有个3x3的numpy ndarray,我有一个list [1, 2, 3],怎么把这个list插入到array中作为最后一行?



Answer

Answer 1:

用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]])
Answer 2:


>>> 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

Answer 1:

肯定是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

Answer 1:


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

Answer 1:

第一个例子中

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

Answer 1:

举个例子,假如我有一个文件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']


Answer 2:

你意思是划分数据集?sklearn中有

from sklearn.model_selection import train_test_split

可以随机划分数据集。


如果不是划分数据集。那么可以使用random随机函数,就可以打乱行数了。多使用python

Answer 3:
如果你指的是将原本样本顺序打乱,dataframe读进来,shuffle。random(data),具体可百度

Question 1002281: matplotlib画三维散点图?

统计/机器学习 数据可视化 Python

比如我有x,y,z三个维度,怎么用matplotlib画一个三维的散点图?



Answer

Answer 1:


# -*- 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()


Answer 2:


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

Answer 1:


df.count()

Question 1002302: 求python里得到n-grams的包?

统计/机器学习 自然语言处理 数据预处理 Python

求一个python里得到n-grams的包

功能是对于给出的一段话,得到所有的n-gram

谢谢指教!


Answer

Answer 1:

nltk我不知道有没有这个轮子,不过这个就是拿来做文本

自己去看下官方文档,说不定就有

Answer 2:

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

Answer 1:

有两种方法

spark_df.schema.names

或者

spark_df.columns


Answer 2:


df.printSchema()



Question 1002319: 关于sklearn.model_selection.PredefinedSplit的用法

统计/机器学习 监督式学习 模型验证 Python

sklearn.model_selection.PredefinedSplit的用法没有搞明白,官方文档没有看得很懂,有谁可以解释下吗?

谢谢!


Answer

Answer 1:


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

Answer 2:

参考wordcloud

from wordcloud import WordCloud


Answer 3:

wordclound


Question 1002330: 系数非负的线性回归的python实现

统计/机器学习 回归分析 Python

我现在需要做一个线性回归,但是考虑到实际意义,要求所有的回归系数都是非负的。回归是采用最小二乘的方法。

请问这类回归在python中有什么实现的方法吗?

多谢多谢!


Answer

Answer 1:

这个叫非负最小二乘回归。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)


Answer 2:

这是带不等式条件的二次规划(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

Answer 1:

选择第一列到倒数第二列就可以了

a = a[:, :-1]


Answer 2:

删除最后一列

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

Answer 1:

我在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

Answer 1:

使用open来读文件,然后统计多少行。

def lineNumber(filename) :

    with open(filename) as lines :

        return len(lines.readlines())


Answer 2:

readlines  

或者dataframe

Answer 3:


sum(1 for line in open(`filename`).readlines())

印象中在stack overflow上见过同样的问题


Question 1002362: numpy里的np.clip函数怎么用?

统计/机器学习 Python

numpy里的np.clip函数有什么作用?怎么用?


Answer

Answer 1:

请看官方文档

作用:

把一个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

Answer 1:

对角线上元素的和就是线性代数里的迹(trace),numpy里有trace这个函数

np.trace(array)



Question 1002378: sklearn.linear_model.SGDClassifier能做小批量学习(mini-batch)吗?

统计/机器学习 监督式学习 Python

sklearn.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

Answer 1:

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)


Answer 2:

sklearn做不到,它没有mini-batch的逻辑回归


Question 1002379: pyspark里unpersist()什么作用?

统计/机器学习 Python

pyspark里unpersist()什么作用?


Answer

Answer 1:

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

Answer 1:


df["C"].tolist()
Answer 2:


df.C.values.tolist()
Answer 3:

list一下不就好了,或者numpy。array


Question 1002406: %matplotlib inline什么意思?

统计/机器学习 数据可视化 Python

在jupyter notebook里import matplotlib之后再输入%matplotlib inline什么意思?


Answer

Answer 1:

魔术命令,可以在notebook中显示用matplotlib绘制的图片。

Answer 2:

其实在新版的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

Answer 1:

如果是数值的话,可以取这两个的平均值或者最大值或者最小值。

然后你看交叉验证的结果,哪个好就用哪个。


Question 1002421: 怎么将两个pyspark dataframe以串联的形式合并?

统计/机器学习 Python

两个pyspark dataframe的列和列名都是一样的,也就是Schema是一样的,怎么将它们以串联的形式合并?


Answer

Answer 1:


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

Answer 1:

pandas的dataframe有自带的

data['type'].mode()


Answer 2:


>>> from scipy import stats

>>> stats.mode(df['col'])



Question 1002441: 如何对中文部分进行独热处理(one-hot)

统计/机器学习 自然语言处理 数据预处理 Python


import 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

Answer 1:

怎么一直没有人回答这个问题...

OneHotEncoder不能直接把string类型的列进行one-hot coding,你需要先用整数代替字符,比如说用LabelEncoder,然后再用OneHotEncoder。

这个问题sklearn onehotencoder的具体用法是和你一模一样的情况,数据中一列是字符形式。你直接看里面的代码就行了。


Question 1002464: pandas读取文件夹中所有的csv文件

统计/机器学习 Python I/O

怎么用pandas读取文件夹中所有的csv文件?

读完之后不一定要合并,各自成为一个单独的dataframe就可以了。谢谢!


Answer

Answer 1:

要利用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

Answer 1:


df = pd.DataFrame(np.random.randn(5, 3), columns=list('ABC'))
for index, row in df.iterrows():

      print(row['A'], row['B'],row['C'])


Answer 2:


df.apply(lamda,axis=0)


Answer 3:


for i in range(len(df)):

	print('i-th row is\n', df.iloc[i])



Question 1002480: numpy里的无穷大np.inf到底是多大呢?

统计/机器学习 Python

numpy里的无穷大np.inf到底是多大呢?有确切的数吗?



Answer

Answer 1:

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


Answer 2:

它就是一个符号,没有数值的,就是无穷大。任何数都小于它。

>> (10 ** 10) ** 10 <= np.inf

True

>> (np.inf + 1) == np.inf

True

>> (np.inf * 5) == np.inf

True



Question 1002482: 怎么对pyspark dataframe更改列名

统计/机器学习 Python

怎么对pyspark dataframe更改列名?


我不是问的pandas dataframe,是pyspark.sql.dataframe.DataFrame。

(pandas更改列名的方法在这里。)


Answer

Answer 1:

kidd23的方法比较麻烦,直接用withColumnRenamed就行了

new_df = df.withColumnRenamed('old_name', 'new_name')
Answer 2:

假如你要把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

Answer 1:

试试这个~

from datetime import date

today = date(2018, 6, 23)

df['days_diff'] = (df['dates'] - today).apply(lambda x: x.days)


Answer 2:

类似nlceyes的方法,不过直接调用了pandas里的today

df['days_diff'] = list(map(lambda x: x.days, df['dates'] - pd.to_datetime('today')))



Question 1002529: 如何用python计算均值的置信区间?

统计/机器学习 描述性统计 Python

如何用python计算均值的置信区间?

谢谢!


Answer

Answer 1:

需要调用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是什么意思

统计/机器学习 Python

python新人,请问python里的continue是什么意思?


Answer

Answer 1:

continute一般用在循环中,比如说下面的例子

for i in range(100):

    if i % 3 == 1:

         continue

    do_something

如果i % 3 == 1,执行continue,跳过下面的do_something,重新开始下一次循环。

Answer 2:

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

Answer 1:

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 TensorFlow


Windows操作系统安装theona后运行程序报错,不清楚问题在哪里,网上找不到解决方法,求助求助!!


Answer

Answer 1:

感觉你是在import你的本地文件theano.py,而不是在import theano。

你把你的文件重命名试试呢?


Question 1002556: 怎么把英文字符串转为小写(python)?

统计/机器学习 自然语言处理 Python

一个英文文本里有大写也有小写,怎么在python中把英文字符串转为全部都是小写?


Answer

Answer 1:

str.lower()

Answer 2:


>>> my_string = 'CHINA'
>>> my_string.lower()
china

Question 1002583: python里的<<或者>>符号是什么意思?

统计/机器学习 Python

python里的<<或者>>符号是什么意思?就是两个小于号连在一起,或者两个大于号连在一起。



Answer

Answer 1:

位运算,左移和右移

a = 1

b = 1 << 4

print('a:\t0x%x\tb:\t0x%x' % (a,b))

# a: 0x1 b: 0x10


Answer 2:

做bit manipulation的,不是逻辑符号


Question 1002595: plt.bar怎么设置每个bar的颜色?

统计/机器学习 数据可视化 Python

plt.bar怎么设置每个bar的颜色?

import matplotlib.pyplot as plt

plt.bar(range(3), [10, 15, 20])

plt.show()

比如三个bar,默认是每个颜色都是一样的。但是如果我想让每个bar颜色不同(比如红、绿、蓝),那该怎么办?


Answer

Answer 1:


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

Answer 1:

这个和保存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

Answer 1:

如果只是浏览器关闭网页的话,程序实际上在后台还是运行的,内存空间还是被占用的。所以需要在jupyter里shutdown。

Answer 2:

每个kernel都会占用内存以及进程,关闭网页并不能关闭kernel,shutdown之后kernel就被中止,内存会释放出来


Question 1002619: 如何对pyspark dataframe删除一列

统计/机器学习 Python

怎么删除pyspark dataframe中的某一列?


Answer

Answer 1:


df = df.drop('col')


Answer 2:

也可以一次性删除多个列

cols_to_drop = ['c1', 'c2', 'c3', 'c4']

df = df.drop(*cols_to_drop)
Answer 3:


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

Answer 1:

sklearn默认的y的类型必须是整数型,你的y可能是float类型,你转换一下应该就好了

y = np.array(y, dtype=int)



Question 1002634: 求助,按照百度的方法从日期提取年龄出现错误了

统计/机器学习 时间序列 Python

AttributeError: 'Series' object has no attribute 'datetime'

对时间序列还不熟悉,请教了


Answer

Answer 1:

试试这个

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变换的函数?

统计/机器学习 概率分布 数据预处理 Python

python中有什么函数可以实现box-cox变换的?

谢谢!


Answer

Answer 1:

参考下scipy.stats.boxcox

用法:

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

Answer 1:

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

Answer 1:

先写出自己定义的函数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

Answer 1:


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='--'

Answer 2:


虚线
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

Answer 1:

题主可以看看这个问题 如何理解predict_proba的返回值




Question 1002708: python产生一个随机置换?

统计/机器学习 抽样方法 Python

怎么用python产生1,2,...,n的一个随机置换,比如1,3,2就是{1,2,3}的一个置换。


Answer

Answer 1:

用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

Answer 1:

先生成两个标准差为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}$


Answer 2:


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

Answer 1:


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

Answer 1:

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

Answer 1:

read_csv里默认的encoding是'utf-8',但是你的文件里应该是有utf-8不能识别的乱码,所以需要换个编码方式

试试下面的

data = pd.read_csv('datafile.csv', encoding = "ISO-8859-1")


Answer 2:

今天使用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

Answer 1:

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

Answer 1:

numpy.ndarray没有head这个方法,如果你想查看一个array的前k行的话,可以用

my_array[:k]



Question 1002821: 怎么把一个大的dataframe按行分割成若干个小的dataframe。

统计/机器学习 Python

比如我的dataframe有一百行。现在我想把它分成10(平均,无放回)个小的dataframe?即返回10个dataframe


Answer

Answer 1:

基本思路就是先生成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

Answer 1:

试试用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

Answer 1:

对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

Answer 1:


>>> sorted(my_dict, key=my_dict.__getitem__)

['A', 'D', 'B', 'C']



Question 1002896: pd.read_csv读取数据时自动跳过空白行

统计/机器学习 数据预处理 Python I/O

用pandas的read_csv方法读取数据时,怎么能自动跳过文件中的空白行?


Answer

Answer 1:

在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

Answer 1:

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

Answer 1:


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

Answer 1:

用&不要用and;同理对于或,用|不要用or

data = data[(data['x1'] > 0) & (data['x2'] > 0)]



Question 1003004: statsmodels里的ols怎么处理分类变量?

统计/机器学习 回归分析 数据预处理 Python

statsmodels里的ols怎么处理分类变量?最好是能够像R里那样,直接处理的,不然的话就要像sklearn那样先one-hot了。多谢各位老铁!


Answer

Answer 1:

比如你有一个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

Answer 1:

第一个参量错了,第一个参量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

Answer 1:

目前好像不支持,他们正在github上讨论(这里),而且已经有人在做了,估计以后就会有了吧。

如果题主急的话,可以看看这个https://github.com/oliviaguest/weighted_k_means,不过我也没用过,不知道效果如何。


Question 1003019: Jupiter notebook里一个cell显示多个dataframe

统计/机器学习 Python

Jupiter notebook里一个cell怎么显示多个dataframe?

现在每个cell只显示最后一个dataframe,也可以用print,但是print出来的结果怪怪的


Answer

Answer 1:

jupyter里用display

display(df1)

display(df2)

display(df3)



Question 1003027: 如何往numpy array中插入一列数组?

统计/机器学习 Python

假设我有一个m行n列的numpy array,还有一个长度为m的数组,怎么将这个数组插入到这个array当中作为最后一列?


Answer

Answer 1:

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]])


Answer 2:


col = [1, 2, 3]

array = np.column_stack((array, col))


Answer 3:

 

Answer 4:


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

Answer 1:

要先把文本转码成整数,然后再做独热。

我写了个函数

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.]])


Answer 2:

不知道算不算答非所问,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

统计/机器学习 Python

jupyter notebook中怎么忽略所有的warning?希望所有的warning都不要显示出来。谢谢!


Answer

Answer 1:


import warnings
warnings.filterwarnings("ignore")



Question 1003066: 怎么用Python画这种温度分布图

统计/机器学习 数据可视化 Python

就是这样的图


Answer

Answer 1:

这种看起来连续的图,可以用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

Answer 1:

应该是plt.subplot而不是plt.subplots


Question 1003075: K近邻算法(kNN)如何实现并行计算?

统计/机器学习 监督式学习 Python

我在用sklearn.neighbors.KNeighborsClassifier,发现可以设置n_jobs,这是并行计算的参量。

那么kNN是怎么实现并行计算的呢?


Answer

Answer 1:

我理解是sklearn只用了比较低级的kNN并行计算。在fit数据时(比如建立kdtree),并没有用到并行计算。只在predict()时才会用多个CPU去找。


至于用Map recude的kNN可以看   http://www.cs.utah.edu/~lifeifei/knnj/

Answer 2:

可以利用类似于Map Reduce的思想:把训练集分成很多小块,求测试样本和每个小块里的样本的距离,然后再把结果汇总。


Question 1003076: 删除numpy array中指定的一列

统计/机器学习 Python

怎么删除numpy array中指定的一列?


Answer

Answer 1:

删除第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

Answer 1:

在scatter_kws里单独设置alpha

sns.regplot(X, Y, color='green', scatter_kws={'alpha':0.5})



Question 1003102: 在python中获取模型运行的时间

统计/机器学习 Python 计算复杂度

我有两个不同的模型,想比较两个模型的快慢,所以我想用结束的系统时间减去起始的时间,来计算运行时间。

那怎么在python获取系统当前的时间?

除了做减法,还有什么直接的方法吗?


Answer

Answer 1:

一般来说 常用方法

starttime=time.time()

endtime=time.time()

totaltime=endtime-starttime

返回时间是秒级时间

可以再次以时间的60进制自己换算

Answer 2:


可以定义一个函数,它的参数是另一个函数,每次计算函数执行时间的时候调用(@deco),详细的信息可以搜一下装饰器

Answer 3:

Python 下还有两个显示程序运行时间和进度的库,不过前提是你需要知道有多少任务需要循环。

sofa 的编辑器不好用,直接截图了,可以参考原文链接Python | 乘上 Time Machine | Thinking Realm



Question 1003108: 怎么利用pandas获得一个列联表(contingency table)?

统计/机器学习 Python

对一个pandas的dataframe中的某两列,怎么获得一个列联表(contingency table)?


Answer

Answer 1:


tab = pd.crosstab(df['col_1'], df['col_2'])



Question 1003115: 如何调节seaborn里字体大小?

统计/机器学习 数据可视化 Python

如何调节seaborn里字体大小?比如sns.barplot里就不支持fontsize


Answer

Answer 1:

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

Answer 1:

你是在做回归还是分类?

如果是分类的话,你需要把y的数值类型转换成int

如果是回归的话,VotingClassifier不支持回归,因为它是对分类器结果进行投票


Question 1003119: 自定义CountVectorizera中默认的英语stop_words

统计/机器学习 自然语言处理 数据预处理 Python

当我们用sklearn.feature_extraction.text.CountVectorizer对英文文本进行处理的时候,怎么自定义英语的stop_words?

谢谢


Answer

Answer 1:

直接设置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

Answer 1:

pandas.read_excel()

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?

统计/机器学习 监督式学习 Python

python里XGBClassifier怎么设置early stop?XGBClassifier里没有找到相关参数


Answer

Answer 1:

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

Answer 1:

可以先转成numpy的array,再转成torch tensor

my_array = np.array(my_df)

my_tensor = torch.tensor(my_array)


Answer 2:

如果你的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

Answer 1:


>>> my_timestamp.strftime('%Y-%m-%d')

'2018-01-01'



Question 1003161: pd Series的用法问题

统计/机器学习 Python

Series值的获取主要有两种方式:

(1)通过方括号+索引的方式读取对应索引的数据,有可能返回多条数据

(2)通过方括号+下标值的方式读取对应下标值的数据,下标值的取值范围为:[0,len(Series.values)];另外下标值也可 以是负数,表示从右往左获取数据 。

如果索引是int类型,想要通过方括号+下标值的方式读取值,但是得到的是通过方括号+索引的方式读取到的值。

所以我想知道:如果索引是int类型,如何通过取得对应下标值的值。



Answer

Answer 1:

你用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

Answer 1:

你看看你的那些col里有没有null或者nan的情况,如果有的话会出错

TypeError: unorderable types: float() < str()



Question 1003177: numpy array里怎么用fillna填充nan的值?

统计/机器学习 Python

pandas dataframe可以用fillna来填充nan的值,但是numpy array好像没有这个功能,还有什么办法能够填充np.array里的nan?


Answer

Answer 1:


>>> 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失败,难道非要编译安装?

统计/机器学习 计算机视觉 Python

rikirobot@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

Answer 1:

看看你python的版本,opencv现在不支持python3.7

要么是你pip版本太旧了,更新一下

pip install --upgrade pip


Answer 2:

没脾气,pip3 install opencv-python成功了,import cv2居然可用……

诡异……

Answer 3:

更诡异的事情是,python2可以import cv2,而python3却失败了。


Question 1003193: numpy維度轉換

统计/机器学习 深度学习 数据预处理 Python

請問要如何將numpy a,原本a.shpae是(10,10,4)轉成(10,10,3)呢??


Answer

Answer 1:

你这个不是转换了,你切除了一部分数据

如果你只是想做slicing的话

a[:, :, :-1]

这样的话,a.shape就是(10,10,3)了



Question 1003195: python里求加权标准差或者加权方差的函数是什么?

统计/机器学习 描述性统计 Python

python里求加权标准差或者加权方差的函数是什么?加权平均是np.average,加权标准差有没有类似的函数?


Answer

Answer 1:

使用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

Answer 1:

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

Answer 1:


import scipy.io as sio
test = sio.loadmat('test.mat')

Question 1003250: python里怎么计算一个数组的熵(entropy)?

统计/机器学习 模型验证 Python

python里怎么计算一个数组的熵?


Answer

Answer 1:

用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

Answer 1:

估计是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

Answer 1:


torch转np:np_data = torch_data.numpy()

np转torch:torch_data = torch.from_numpy(np_data)

Answer 2:


my_arr = my_tensor.numpy()



Question 1003270: Python中怎么把一个RGB彩色图像转成灰度黑白图像?

统计/机器学习 计算机视觉 Python

Python中怎么把一个RGB彩色图像转成灰度黑白图像?

需要使用opencv吗?


Answer

Answer 1:

使用Pillow,通过pip install Pillow安装。

代码是:

from PIL import Image



img = Image.open('input_file.jpg').convert('L')



img.save('output_file.jpg')


Answer 2:


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)


Answer 3:

666


Question 1003271: python如何删除dict中的一个key?

统计/机器学习 Python

如何删除python的dictionary的一个key?需要先判断是否存在这个key吗?


Answer

Answer 1:

一种是先判断

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是星期几?

统计/机器学习 时间序列 Python

pandas里dt.dayofweek返回0到6的数,0对应的星期一还是星期天?


Answer

Answer 1:

是星期一。

>>> 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 "", line 3, in raise_from

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 "", line 968, in _find_and_load

  File "", line 953, in _find_and_load_unlocked

  File "", line 887, in _find_spec

TypeError: 'NoneType' object is not iterable


Process finished with exit code 1



Answer

Answer 1:

我也是看的一个增强学习小游戏代码,貌似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

Answer 1:

你固定random_state了么?

GradientBoostingClassifier(你的参数, random_state=0)



Question 1003338: 怎么让DataFrame按照某一列绝对值从小到按排列?

统计/机器学习 Python

怎么让pandas DataFrame按照某一列的绝对值从小到按排列?


Answer

Answer 1:

没有直接的函数可以用,只能先建一个辅助列,然后根据辅助列排序,然后再把辅助列删掉

代码如下

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


Answer 2:

比如按照‘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

Answer 1:

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.]])


Answer 2:

直接手算似乎更方便

df['x1_x2'] = df['x1'] * df['x2']

Question 1003350: python如何对日期做遍历?有没有类似range的函数?

统计/机器学习 时间序列 Python

python里对整数遍历很方便,可以用

for i in range(5, 10)

来对5到10做遍历。

如果是日期变量,怎么进行快速遍历?比如说从2018-09-01到2018-10-01。


Answer

Answer 1:

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')


Answer 2:


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

Answer 1:

分两步:取出最后一列,插到第二列之前。

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

Answer 1:

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()方法是什么意思?

统计/机器学习 Python

pyspark dataframe的collect()方法是什么意思?有什么用?


Answer

Answer 1:

spark_df.collect()相当于spark_df.show(全部行)

就是一次性把这个dataframe里的所有行显示出来


Question 1003401: python中怎么把千位分隔符以及货币符号去掉转成数值形式?

统计/机器学习 数据预处理 Python

python中怎么把千位分隔符以及货币符号去掉转成数值形式?

比如下面的这种

$10,000
¥1,000,000.00

怎么转换成数值?


Answer

Answer 1:

用正则表达就可以了

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

Answer 1:

是的,用最近90天的就能预测下一天的了。如果你的x_test只有90天的数据,你也就只有一个prediction吧,然后你拿一个prediction和一个真值做比较,得到误差吗?


Question 1003414: python中如何修改时间戳变量里的小时?

统计/机器学习 时间序列 Python

ts是我自己定义的一个时间戳变量,包含日期小时分等信息。ts里小时是10

>>> ts.hour

10

我想把它重新赋值为12

>>> ts.hour = 12

结果报错,如下

AttributeError: attribute 'hour' of 'datetime.datetime' objects is not writable

请问应该如何才能修改datetime变量的小时?


Answer

Answer 1:

使用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

Answer 1:

并没有直接做加权平均的函数,你可以自己写出表达式来

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

Answer 1:

不知道你的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中求加权中位数

统计/机器学习 描述性统计 Python

python里求加权平均可以用numpy.average,有没有类似可以求加权中位数的方法?

谢谢!


Answer

Answer 1:

你装一个wquantiles(pip install wquantiles),然后可以直接用weighted来算加权中位数

weighted.median(values, weights)

Question 1003447: lightgbm.LGBMModel和lightgbm.LGBMClassifier该用哪个?

统计/机器学习 监督式学习 Python

python的lightgbm模块里面好几个模型,一个是lightgbm.LGBMClassifier,还有一个是lightgbm.LGBMRegressor,此外还有一个是lightgbm.LGBMModel。我现在是要做分类,到底是用LGBMClassifier还是LGBMModel?这两个效果有什么区别吗?


Answer

Answer 1:

直接用的话,分类是LGBMClassifier,回归是LGBMRegressor。

如果要用LGBMModel,要在参数objective指定你的任务类型(regression, binary, multiclass, lambdarank),我一般都是直接用LGBMClassifier或者LGBMRegressor,没用过LGBMModel,不过我觉得指定了任务类型之后,其他参数一样的情况下,效果应该是一样的,因为LGBMClassifier是继承自LGBMModel,objective默认设置为binary或者multiclass。


Question 1003452: XGBClassifier和XGBRegressor里的base_score有什么用?

统计/机器学习 监督式学习 Python

XGBClassifier和XGBRegressor里都有一个base_score变量,这个变量有什么用,需要设置吗?还是作为调参的选项?


Answer

Answer 1:

base_score就是总体的均值,对于二元分类问题,base_score就是1占据的比重;对于回归问题,base_score就是整体的均值。

如果样本有权重,base_score就应该设置为加权均值。

base_score相当于是迭代的初始的起点,如果设置base_score的话,并且设置为总体均值的话,应该能够起到加快收敛的效果,但是即使没有设置base_score,只要Learning rate适当,迭代步数够多,设置base_score与否也不影响最终结果。

Answer 2:

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


Question 1003466: pyspark里如何进行SELECT DISTINCT操作?

统计/机器学习 Python

sql里可以SELECT DISTINCT col1, col2 FROM tab

怎么对pyspark的dataframe进行这样的select distinct的操作呢?


Answer

Answer 1:


df.select('Col1', 'Col2').distinct()



Question 1003471: numpy.histogram怎么生成直方图?

统计/机器学习 描述性统计 数据可视化 Python

numpy有个直方图函数histogram,比如说

np.histogram(a, bins=20)

但是这个函数的返回结果并不显示出图像,这该怎么办?


Answer

Answer 1:

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原始接口没有这个参数?

统计/机器学习 监督式学习 Python

xgboost的sklearn接口有n_estimators参数,也就是树的个数。但是xgboost原始接口没有这个参数?


Answer

Answer 1:

有的,名字换掉了,原始接口里是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

Answer 1:

用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算法问题

统计/机器学习 半监督学习 Python

LPA算法(标签传播算法)的原理非常简单,我自己用python实现了一下,但是为什么和调用igraph库的最终结果模块度相差甚远


Answer

Answer 1:

LPA的算法本身有随机性,而且收敛也不稳定,很多包都已经进行了优化,你自己实现的肯定没有各种库好


Question 1003521: gc.collect()返回值是什么意思

统计/机器学习 Python

python里gc.collect()命令可以回收没有被使用的空间,但是这个命令还会返回一个数值,那么返回值是什么意思


Answer

Answer 1:

gc.collect()返回的整数,是清除掉的垃圾变量的个数。


Question 1003524: 怎么把dataframe的一列转成整数类型

统计/机器学习 数据预处理 Python

怎么把pandas dataframe的一列转成整数类型

我试了用numpy,比如

df['a'] = np.int(df['a'])

结果报错

TypeError: cannot convert the series to 

请问有什么方法可以把pandas dataframe的一列转成整数类型


Answer

Answer 1:


df['a'] = df['a'].astype(int)


Answer 2:

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

Answer 1:

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

Answer 1:

可能你需要用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

Answer 1:

去看了源码,原来是里面有个判断,当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

Answer 1:

这个问题和python没有关系,是你的操作系统里没有graphviz

mac上

brew install graphviz

centos上

yum install graphviz



Question 1003569: FM算法(因子分解机)有专门的算法框架吗?

统计/机器学习 监督式学习 Python

FM算法(因子分解机)在ctr问题上有广泛应用,我在网络搜索不到FM的算法框架。FM算法(因子分解机)有专门的算法框架吗?


Answer

Answer 1:

好像没有现成的框架,至少sklearn和scipy里没有。

我刚刚搜了一下,感觉这个xlearn可以试试,不过我也没有用过。


Question 1003570: 怎么把python的dict存为json格式文件

统计/机器学习 Python I/O

怎么把一个dict类型的变量存为json格式的文件到本地?


Answer

Answer 1:

使用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()


Answer 2:


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

Answer 1:

pandas里没有累计缺失值个数的函数,所以要用lambda

df.groupby('a').agg({'b': lambda x: x.isnull().sum()})

Question 1003585: sns barplot调整置信水平

统计/机器学习 描述性统计 数据可视化 Python

seaborn的barplot可以自动画出带置信区间的柱状图,上面的那段黑线就是置信区间,我想知道seaborn里置信水准的默认值是多少?能不能画成0.90的置信区间



Answer

Answer 1:

那个插在上面的小棍子的默认值是95置信区间,如果你要设置为其他数的话,就改一下ci这个参数

sns.barplot(..., ci=90)

这种问题我觉得直接看文档反而比较快。


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

Answer 1:

试试调一调learning rate吧,然后你只用一层的结构试试看,debug一下

Answer 2:

虽然还没找到错误出在哪,但是先记录下:

1. 把隐含层去掉后,即只有输入层和输出层,output能看的出来有分类,错误可能是出在了hidden_layer上,但是还没有找出来到底在哪。


2. 正则化0.1太小了 可能找不到最优 我调成0.8之后就对了

Answer 3:

有可能是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

Answer 1:

用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

Answer 1:

在terminal里好像不能直接用,需要先声明后端是agg

然后再引用marplotlib.pyplot,顺序也不能颠倒

import matplotlib

matplotlib.use('agg')

import matplotlib.pyplot as plt

Question 1003610: 怎麼將dataframe 欄位 對應到原有的csv檔 而寫入

统计/机器学习 数据预处理 Python

         0 王大嬌

0 0.450196 數學

1 1.889275 國文

2 1.889275 社會


寫入 原有csv 



Answer

Answer 1:

应该做不到吧,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中每棵树的权重?

统计/机器学习 监督式学习 Python

sklearn里怎么获得adaboost中每棵树的权重?


Answer

Answer 1:

AdaBoostClassifier有estimator_weights_属性

clf = AdaBoostClassifier()

tree_weights = clf. estimator_weights_

tree_weights是一个长度为k的array,k就是这个adaboost分类器里树的个数


Question 1003667: python里的cdef是什么?

统计/机器学习 Python

python里的cdef是什么?和正常的def有区别么?


Answer

Answer 1:

def 用来在Python中声明一个函数。cdef 在Cython的C语言层面声明了函数。


Question 1003670: 递归特征消除(RFE)方法可以用到生存分析数据上吗?

统计/机器学习 数据降维 特征选择 R Python

现有一个高维的生存分析数据,想用RFE筛一下变量,目前看到的算法都是分类数据,生存数据怎么实现呢?


Answer

Answer 1:

不知道你特指的是什么编程语言,看到你的问题标签里既有R也有Python。

如果是python的话,可以参考sklearn.feature_selection.RFE

如果是R的话,可以参考Variable Selection Using The caret in R


Question 1003691: python如何产生指定相关系数的多组数据

统计/机器学习 抽样方法 数据降维 描述性统计 Python

每组数据40个 取值1-5 整数

可以指定组之间相关系数,最好可以同时指定均值 方差 

想拿来验证一下问卷的因子分析

最好用python


Answer

Answer 1:

整数比较难做,最好是用正态分布的,这样比较容易生成有相关性的两组正态数据

可以看看如何生成两个相关的标准正态随机变量


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

Answer 1:

方法如下

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

Answer 1:

用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

Answer 1:

对行去重并且不保留重复

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

Answer 1:


import sys
print(sys.version)



Question 1003792: print里的"%.2f"是什么意思?

统计/机器学习 Python

print里的"%.2f"是什么意思?


Answer

Answer 1:

"%.2f"显示保留两位小数的浮点数,类似地"%.3f"是保留3位小数

比如

a = 0.12345
print("%.3f"%a)

打印出来就是0.123


Question 1003815: matplotlib画图怎么确保横坐标和纵坐标的单位长度一致?

统计/机器学习 数据可视化 Python

matplotlib画图怎么确保横坐标和纵坐标的单位长度一致?下面的图里面单位1的长度在x轴和y轴明显不一样。

怎么设置参数才能让x轴和y轴的单位度量一样长呢



Answer

Answer 1:


plt.axis('equal')

或者

plt.axis('scaled')

Question 1003841: numpy生成二维随机均匀分布?

统计/机器学习 概率分布 Python

我想在[0, 10]x[0, 10]这个区域里生成随机的点,该怎么做?


Answer

Answer 1:


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

Answer 1:

用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

Answer 1:

这个就是和numpy里的reshape是一样的

output = output.view(-1, 1)

output不改变数据,但是改变数据的形状,1是表示一列,最后得到的是一个列tensor


Question 1003880: 怎么对pandas dataframe的行按照权重进行抽样?

统计/机器学习 抽样方法 数据预处理 Python

怎么对pandas dataframe的行按照某个权重进行有放回地抽样?

假设每行都有一个权重,权重大的行就更容易抽到,甚至多次被抽到,这个怎么实现呢?


Answer

Answer 1:

假设你要你抽出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

Answer 1:

这些天我思考了一下,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呢。。。

之前的貌似被吞了,现在补上。。。

Answer 2:

最简单的方法就是直接把结果合并,类似于stacking

每个服务器都训练出一个模型,每个模型的预测值的平均值就可以作为你合并之后的结果

或者也可以ensemble,把每个模型的输出值作为ensemble模型的输入值,再训练一个小模型


Question 1003906: sklearn可以用gpu加速吗?

统计/机器学习 Python

感觉sklearn还是有点慢的,特别是gridsearch调参的时候。sklearn可以用gpu加速吗?


Answer

Answer 1:

sklearn不支持GPU

截止到2019年2月,官网上依然标明了“在可预见的未来,sklearn不会考虑增加gpu支持。”

原因以及原文看链接:will sklearn add gpu support

Answer 2:

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

Answer 1:

推荐试试Wikipedia-API,也是维基百科的api,使用起来很方便

pip install wikipedia-api
Answer 2:

试试pip install wptools呢?


Question 1003935: python里@property有什么用

统计/机器学习 Python

python的class里出现的@property是什么意思?有什么用?

比如下面这个例子

class MyClass:

    ...

    @property

    def get_date(self):

        return self._get_date


Answer

Answer 1:

将类方法转换为只读属性

例如



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


Answer 2:

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

Answer 1:

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

Answer 1:

按照mycol这列从大到小排列

df = df.sort(F.col('mycol').desc())

按照mycol这列从小到大排列

df = df.sort(c('conversions').asc())

Question 1003984: 怎么用python批量生成含重复数值的数列?

统计/机器学习 Python

R里用rep很方便就可以生成类似于

[1, 1, 1, 2, 2, 2, 2, 5, 5, 5, 5, 5]

这样含有大量重复数值的数列。

python里面怎么实现?有没有类似的函数?


Answer

Answer 1:

   


Question 1003992: 用np.round的时候报错AttributeError: no attribute 'rint'

统计/机器学习 Python

我对一个numpy array做round进行四舍五入,然后一直出现

AttributeError: 'numpy.float64' object has no attribute 'rint'

这个情况有遇到过的么?是numpy出bug了么?


Answer

Answer 1:

可能是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

Answer 1:

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

Answer 1:


df.head(10).append(df.tail(10))
Answer 2:


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

Answer 1:

你需要设置random_state,比如

pca = PCA(n_components=200, random_state=999)
Answer 2:

查sklearn手册,数据大于500x500,svd solver自动选randomized,得到随机的近似解。你可以选solver,或者用小点的数据。


Question 1004044: 怎么按照index对pd.DataFrame的行排序?

统计/机器学习 Python

如题。按照某列对DataFrame排序的话,可以用sort_values('column'),但是对于index,没有这样的用法,该怎么解决呢?


Answer

Answer 1:

和sort_values类似,有sort_index

df = df.sort_index()

Question 1004049: 怎么把一个pandas数据框用append的方式添加到现有的csv文件?

统计/机器学习 Python

怎么把一个pandas数据框用append的方式添加到现有的csv文件?


Answer

Answer 1:

就和正常的输出一样,只不过加上mode='a'和header=False

df.to_csv('the_data_file.csv', mode='a', header=False)
Answer 2:


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

Answer 1:

用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()


Answer 2:


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

Answer 1:

scatter里没有markersize,是s

plt.scatter(x, y, s=15)

Question 1004112: sklearn里zero_one_loss是什么?

统计/机器学习 Python 损失函数

sklearn.metrics.zero_one_loss是什么?就是1-accuracy吗?


Answer

Answer 1:

计算预测值和真实值不匹配的比例。有个参数normalize,默认是True,如果设置为False,就是计算不匹配的个数。

Answer 2:

是的。这个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

Answer 1:

cv2.waitKey()是等待键盘的响应,0是代表一致等待,这还可以输入其他的数值,只不过是以毫秒为单位的

Answer 2:

当你使用cv2.imshow()函数得时候,代码一直往下走到最后一行,直接结束代码。

cv2.waitKey()的主要作用是让你的程序不直接退出,等到你按下任何按键之后整个程序才退出。

这样子当你用cv2.imshow()的时候,你才能让你展示的图像保持着不会退出。

而cv2.destroyAllwindows()的主要作用是清除所有show出来的图像,当然你不做这一步的话,程序退出的时候会自动清楚。


Question 1004131: 如何将csv中多行变成一行

统计/机器学习 Python


原始数据放到csv中变成了3行  如何通过pd.read_csv 将3行变成一行


Answer

Answer 1:

不一定要在python中处理吧,你可以在sublime里处理,直接“查找替换”。

把 \n详细 换成 \t详细

把 \n2019- 换成 \t2019-

Answer 2:

个人建议先写脚本处理一下:)


Question 1004132: 东方财富的数据怎么爬下来

统计/机器学习 Python

如图的数据怎么爬 放入excel



Answer

Answer 1:

web scraper


Question 1004139: pandas中某列中数字后边有 亿/万这种单位 如何处理

统计/机器学习 Python

直接去掉数据就变了  怎么把它直接后边加几个0


Answer

Answer 1:

#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

Answer 1:


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

Answer 1:


a = '[1, 2, 3]'
b = eval(a)
print(b)
Answer 2:

有个包叫ast,可以把文字表述的list转成list

import ast

a = '[1, 2, [3, 4]]'

nums = ast.literal_eval(a)

Question 1004161: 怎么给plt.subplot加一个主标题?

统计/机器学习 数据可视化 Python

plt.title()可以给每个subplot加一个副标题,比如下面的data1,data2,data3


我怎么给图的整体的上方加一个主标题或者说大标题?


Answer

Answer 1:

有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

Answer 1:


df = pd.concat([df1, df2[df1.columns])

Question 1004168: pandas数据合并 merge 相同的列能不能合并

统计/机器学习 Python

比如体重和数学 两个表都有的能不能弄成一列

因为姓名要包含所有的  所以要用outer  

能不能axis=0 outer  axis=1 inner这种


Answer

Answer 1:


result = pd.merge(df1, df2, on=['姓名', '数学', '体重'], how='outer')
Answer 2:

补充@派大星的答案

如果不想把两个dataframe相同的列当作Join的Key的话,就Join之前从左表或者右边先删除重复的列(当然要留下一个Join Key)。



Question 1004171: sklearn里有哪些方法是可以处理不均衡的分类问题的?

统计/机器学习 监督式学习 开放问题 Python

sklearn里有哪些方法是可以处理不均衡的分类问题的?比如采样和权重?


Answer

Answer 1:

通过欠采样、过采样等方法来调整样本分布,可以参考imbalance包

调整样本权重,可以调整类似Logistic Regression中的class_weight参数来调整不同类别样本对损失函数影响的大小。

如有错误,欢迎指出。


Answer 2:

sklearn只是工具,很多时候需要自己去完成一些步骤来处理非均衡问题。

比如欠采样、过采样,训练时候的权重,交叉验证的时候进行分层验证。

选用适合的损失函数和评价标准也是很重要的,比如用roc auc以及召回-精度曲线。

Answer 3:

在选择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 中的某个元素是否字符串?

统计/机器学习 Python

rt


Answer

Answer 1:

我是问每个元素类型是否 是字符串 

找到答案了 谢谢

type(x)==str


Question 1004182: numpy.full这个函数有什么用?

统计/机器学习 Python

numpy.full这个函数什么用?


Answer

Answer 1:

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里决策树的实际深度?

统计/机器学习 监督式学习 Python

sklearn里的决策树模型,DecisionTreeClassifier和DecisionTreeRegressor都可以设置最大深度max_depth。

我想知道在训练结束之后,怎么获得树的实际深度呢?

我觉得并不是每次训练树都能恰好达到最大深度,所以想看看实际深度。


Answer

Answer 1:


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

Answer 1:


df["a"].fillna(df["b"])


Answer 2:


df['a'].combine_first(df['b'])

Question 1004198: python怎么去除字符串中的连字符?

统计/机器学习 Python

比如这个字符串'12-a-b-c',其中有一些连字符-,python中怎么把这些连字符都去掉?

效果是'12-a-b-c'变成'12abc'


Answer

Answer 1:

把'-'换成''就可以了

s = '1-2-3'

ss = s.replace('-', '')

Question 1004203: 一维数据怎么输入卷积网络。

统计/机器学习 Python 人工神经网络 TensorFlow

有一组400个观测值 每个观测值都有20000个变量,相当于是一个20000*400的矩阵 怎么作为input输进cnn啊。想做一维卷积


Answer

Answer 1:

可以将数据形状reshape,从(20000,400)变成(20000,1,400)


Answer 2:

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

Answer 1:

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

Answer 1:

我没有出现过这个问题,感觉是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

Answer 1:

logit是逻辑回归的link function。

roc是逻辑回归的评价标准。

不是一回事。

Answer 2:

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

Answer 1:


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。

Answer 2:

没事了,我知道了coef_是权重

intercept_是偏置

Answer 3:

如果最终模型是y=2x+4

reg.coef_应该是2

reg.intercept_应该是4


Question 1004228: sklearn里有没有计算rmse的函数?

统计/机器学习 模型验证 Python 损失函数

sklearn里有没有直接计算rmse的函数?


Answer

Answer 1:

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使用的例子

统计/机器学习 Python

sklearn.pipeline.Pipeline怎么用?求一个简单的例子。谢谢各位!


Answer

Answer 1:

SofaSofa里这两个标杆模型都用到了pipeline,建议看看。

标杆:地震后建筑修复建议


Question 1004242: 怎么获得当前jupyter notebook的token(密码)?

统计/机器学习 Python

求助:怎么获得当前jupyter notebook的token(密码)?


Answer

Answer 1:

你在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

Answer 1:


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

Answer 1:

官方文档说了(这里),所以别用__del__,估计是历史遗留问题,所以在python的新版本里还留着。

用del删除变量,不代表.__del__被调用了。

Answer 2:

只要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__
Answer 3:


def __init__(self):

定义了一个对象被创建后的行为

def __del__(self):

定义了一个对象被销毁后的行为


Question 1004307: 随机森林警告:A column-vector y was passed when a 1d array was expected

统计/机器学习 监督式学习 Python

python里随机森林的代码

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

Answer 1:

这个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

Answer 1:

numpy.savetxt

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

Answer 1:

from_dict是用来转dict到df的

my_df = pd.DataFrame.from_dict(my_dict, orient='index')
Answer 2:


>>> 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

Answer 1:

设置一下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颜色相互转换?

统计/机器学习 计算机视觉 数据可视化 Python

HEX颜色是string类型,比如'#fffbbb',我想把它转成RGB颜色,list或者numpy array类型,比如(255, 251, 187)。

怎么实现呢?谢谢~


Answer

Answer 1:


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

Answer 1:

把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

Answer 1:


from sklearn.utils import shuffle

arr = shuffle(arr)
Answer 2:


>>> 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的

Answer 3:

问题不是很清楚,什么叫做打乱一个numpy矩阵?能举个例子吗?


Question 1004385: python如何判断某路径下是否存在指定的csv文件?

统计/机器学习 Python

在用pandas读取csv文件前,如何判断在指定路径下的某个csv文件是否存在呢?


Answer

Answer 1:

提供另外一种不用try的方法

import os
flag = os.path.isfile('path_to_file/data.csv')
if flag:
    print('file exists')
Answer 2:

可以用try的方法吧

try:

    data = pd.read_csv('path/file.csv')

except:

    print('not found')

Question 1004390: python中怎么判断某一年是闰年?

统计/机器学习 时间序列 Python

python中怎么判断某一年是闰年?


Answer

Answer 1:

python有built-in的calendar

import calendar

calendar.isleap(2016)
Answer 2:

如果年份末尾两个零,除以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

Answer 1:


lista=['a', 'b', 'c']
for v in lista:
    locals()["var"+v] = 1
Answer 2:

感觉做不到这个,建议你用dict。

variables = dict()

for v in ['a', 'b', 'c']:

    variables['var%s'%v] = None

Question 1004410: python中休眠

统计/机器学习 Python

怎么在python中让程序休眠一段时间,比如

执行代码1

休眠10秒

执行代码2


Answer

Answer 1:


from time import sleep

sleep(10)

Question 1004414: python matplotlib画图中怎么显示latex数学公式?

统计/机器学习 数据可视化 Python

python matplotlib画图中怎么显示latex数学公式?


Answer

Answer 1:

直接在字符串里加单美元符号就可以了

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

Answer 1:

tuple是只读的,不能对内部的元素进行重新赋值。

建议用list。list和tuple几乎完全一样,主要区别就是list可读可写。


Question 1004424: python怎么生成截断正态分布变量?

统计/机器学习 概率分布 Python

python怎么生成截断正态分布变量?


Answer

Answer 1:

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

Answer 1:

假设把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

Answer 1:

从时间复杂度上来说,好像只能跑10000*100个循环了


Question 1004431: sklearn r2_score返回负数

统计/机器学习 回归分析 模型验证 Python

用了sklearn里自带的r2_score来检验回归的效果

from sklearn.metrics import r2_score

结果返回了一个负数,这个什么情况,出bug了么?


Answer

Answer 1:

不是bug,是你的预测结果不大好导致的。$R^2$并没有平方的意思,是可以是负数的。

题主可以参考之前一样的问题:回归问题中R方可以是负数?


Question 1004461: python中怎么对list中元素进行有放回抽样?

统计/机器学习 抽样方法 Python

python中怎么对list中元素进行有放回抽样?


Answer

Answer 1:

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

Answer 1:

keras里的predict_proba是和sklearn里的predict_proba完全一样的,输出的是每一类的概率

keras的predict_classes是相当于sklearn的predict,也就是返回预测的分类

keras中predict和predict_proba等价的

Answer 2:

分类问题用predict_classes,predict_proba。前者返回标签,后者返回概率。

回归问题用predict,返回数值。


Question 1004474: matplotlib plt.hist画直方图,怎么改变直方之间分界线的颜色?

统计/机器学习 数据可视化 Python

我用了matplotlib pyplot的hist画直方图,如下图

现在每个直方柱之间的分界线是黑色,不是太明显,请问怎么把这个颜色改成白色?谢谢!


Answer

Answer 1:

在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

Answer 1:

你这个森林深度有点大啊,如果你把深度调小点,效果应该差不多。

另外你保存的时候,设置一下compress参数应该会减小很多空间

from sklearn.externals import joblib

joblib.dump(my_rf_model, "rf.pkl", compress=9)

#my_rf_model是你训练好的模型

compress的值是0到9之间,越大表示压缩程度越高。

Answer 2:

随机森林一般深度不要超过10,不然每棵树过拟合严重,而且就会有你遇到的问题,模型太大,不管是调用还是存储都是问题。

Answer 3:

我觉得模型选择上挺好的,随机森林固有的两类随机性可以很好的处理特征较多的情况,但是深度有些大了,过拟合有很大的概率会出现,可读性也不会太好。



Question 1004513: 怎么在jupyter notebook设置全局的随机种子?

统计/机器学习 Python

我的实验里有好几个步骤涉及到随机,有的是numpy,有的是在sklearn模型里。

怎么在jupyter notebook设置全局的随机种子?

这样的话我每次运行整个notebook能够得到一致的结果。谢谢!


Answer

Answer 1:

在第一个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

Answer 1:

num_words=10000的意思是训练集中我们指保留词频最高的前10000个单词。10000名之后的词汇都会被直接忽略,不出现在train_data和test_data中。


Question 1004549: keras里layer默认的激活函数是什么?

统计/机器学习 Python 人工神经网络 TensorFlow

keras里layer默认的激活函数是什么?下面这个代码里就没有指明activation是什么。

model.add(layers.Dense(1))



Answer

Answer 1:

默认的就是线性激活函数,就相当于是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

Answer 1:


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

Answer 1:

只用groupby和agg估计做不到。我觉得你可以对date和sales排序,然后对date去重,只保留每个date的最后一行也就是sales最大的一行

df.sort_values(['date', 'sales']).drop_duplicates(['date'], keep='last')

Question 1004568: python里怎么计算两个向量的余弦相似?

统计/机器学习 描述性统计 Python

python里怎么计算两个向量的余弦相似?


Answer

Answer 1:

你可以用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

Answer 1:


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

Answer 1:

需要stack之后再mean

torch.mean(torch.stack([t1, t2, t3, t4]), 0)

Question 1004583: 怎么在pyspark里把dataframe写入csv文件?

统计/机器学习 Python

怎么在pyspark里把dataframe写入csv文件?


Answer

Answer 1:


df.write.csv('mycsv.csv')
Answer 2:

楼上这样写会把文件写到hdfs上,如果数据量小的话,可以考虑df.toPandas().to_csv('mycsv.csv')直接拿到本地,数据大的话就算了。


Question 1004584: 怎么对pandas dataframe的行进行有放回抽样?

统计/机器学习 抽样方法 Python

比如一个pandas dataframe有n行,怎么对这n行进行有放回抽样,取出m行组成新的dataframe?


Answer

Answer 1:


df.sample(m, replace=True)
Answer 2:

有放回地抽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

Answer 1:

fit_transform和transform的返回值是一样的,返回的array的每一行是每一个样本到kmeans中各个中心点的$L_2$距离。行数就是样本的个数。

你说的8列,是因为sklearn.cluster.KMeans默认是分成8个cluster。


Question 1004598: print(__doc__)有什么用?

统计/机器学习 Python

python文件开头的print(__doc__)有什么用?求解答


Answer

Answer 1:


# --------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

Answer 1:

很多啊,只要是增量学习的算法都有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区别

统计/机器学习 Python

pandas.DataFrame里at, iat, loc, iloc区别是什么?才入门感觉不是很好理解啊


Answer

Answer 1:

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

Answer 1:

和numpy array的转置一样的,加个.T就可以了



Question 1004624: 怎么对有多个空格的字符串进行split?

统计/机器学习 Python

比如'a b    c',我想得到的是['a', 'b', 'c'],但是用split.(' ')得到有空字符

>>> 'a b   c'.split(' ')

['a', 'b', '', '', 'c']

如果我想对有多个空格的字符串进行split并且忽略多个连在一起的空格,该怎么做?不知道我描述的清楚不清楚,谢谢大家。


Answer

Answer 1:

'a b    c'.split(),注意split()括号里面默认即可

Answer 2:


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

Answer 1:

你再读取一个同样大小的空白图片,然后提取空白图片的轮框。你再用上图的轮框减掉空白图片的轮廓,就可以得到你要的了吧


Question 1004634: 如何用matplotlib在3D空间呈现x^2+y^2?

统计/机器学习 数据可视化 Python

如何在3D空间呈现x^2+y^2



Answer

Answer 1:

你可以用颜色表示$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()
Answer 2:


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很差

统计/机器学习 回归分析 Python


import 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

Answer 1:

看样子像过拟合了,应该是你变量太多,有多重线性相关了。

Answer 2:

你换个random forest试试,再用cv调一下参


Question 1004657: %%timeit结果解释

统计/机器学习 数据预处理 开放问题 Python

jupyter 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

Answer 1:

最下面那个最快吧,47.4 ns x 10000000  < 52.4 ns x 10000000  < 59.2 ms x 10 < 123 ms x 10


Question 1004659: sklearn模型当中的verbose是什么意思?

统计/机器学习 Python

sklearn模型当中的verbose是什么意思?

一般怎么设置verbose等于几?


Answer

Answer 1:

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

Answer 2:

verbose用来控制在训练过程中返回信息的详细程度。verbose=0就是训练时不返回任何信息,verbose=1训练时返回一些信息,verbose=2返回训练步骤的详细信息。


Question 1004676: sklearn中的Randomizedlogisticregression是什么算法?和SGDClassifier一样吗?

统计/机器学习 监督式学习 Python

sklearn中的Randomizedlogisticregression是什么算法?和SGDClassifier一样吗?


Answer

Answer 1:

新版的sklearn里的确没有RandomizedLogisticRegression。

但是这个算法的思想本身还是有点意思。

首先对训练集进行bootstrap,然后随机设定一个L1 penalty,拟合一个逻辑回归,当然最终只有一些特征的系数不为0。

多次重复以上步骤,一个特征非零次数越多,说明它越重要。

Answer 2:

这个不重要了。新版本的sklearn里已经把RandomizedLogisticRegression删掉了。


Question 1004677: python画散点图的时候如何在右侧显示光谱?

统计/机器学习 数据可视化 Python

python画散点图的时候,颜色表示了数值的大小。类似于下面这个例子,但是我的图没有显示右侧的这个光谱,如何让它显示出来?


上面这个图右侧就有光谱,我要怎么显示?初来乍到,谢谢各位!


Answer

Answer 1:


plt.scatter(x=range(20), y=range(20), c=range(20), cmap='RdYlGn')

plt.colorbar() #添加光谱柱

plt.show()

效果如下:



Question 1005281: plt.subplot怎么设置才能每行图的个数不一样?

统计/机器学习 数据可视化 Python

plt.subplot(m, n, i)是画出m乘n个子图,每行都是n个图。

请问怎么设置才能使得每行图不一样多?

比如第一行4个图,第二行两个一样长的长图,第三行又是4个图。


Answer

Answer 1:

用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

Answer 1:

pandas的series或者dataframe有contain这个功能,应该就是题主要的

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.contains.html


Question 1005283: 有nonetype的list怎么转str

统计/机器学习 Python


stri=" ".join(i)
TypeError: sequence item 0: expected str instance, NoneType found


Answer

Answer 1:

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

统计/机器学习 Python

df只有一列a

从第一行开始a的每10行相加放到a的后边形成suma 

第一个suma =sum(df.a[0:9])

第2个suma =sum(df.a[1:10])


用最笨的方法计算 大概3个小时 

有没有高效的方法呢


Answer

Answer 1:

pandas里有rolling,可以求移动和以及移动均值的。

df['a'].rolling(window=10).sum()
Answer 2:

你可以插入一个辅助列叫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'})
Answer 3:

可以换用numpy操作,应该能快一些


Question 1005418: 怎么得到randomforestregressor里每棵树的预测结果?

统计/机器学习 监督式学习 Python

我在sklearn里用了30棵树的randomforestregressor,按照原理来说,我应该得到了30个单独的数值预测结果。怎么获得随机森林中每棵树的预测结果呢?


Answer

Answer 1:

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怎么用?

统计/机器学习 Python

pandas里pd.cut怎么用?


Answer

Answer 1:

官网上介绍的比较清楚了,并且在下面还有例子。

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]]
#返回的是每个元素所在的区间
Answer 2:

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

Answer 1:

logistic regression也可以用L1正则项,类似于回归中的lasso。

此外也可以用random forest或者xgboost,它们会返回特征的重要性,也相当于是特征选择。


Question 1005445: gensim word2vec中wmdistance是什么距离?

统计/机器学习 自然语言处理 描述性统计 Python

gensim word2vec中wmdistance是什么距离?


Answer

Answer 1:

WMD(Word Mover Distance)

计算两个文档之间的移动距离

详细计算可以看这里


参考文献:

  1. Ofir Pele and Michael Werman, "A linear time histogram metric for improved SIFT matching".
  2. Ofir Pele and Michael Werman, "Fast and robust earth mover's distances".
  3. 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

Answer 1:

参考一下这个问题怎么处理真值大部分为0的回归问题

上面那个问题中kykix回答的可能比较适合你

1)先用所有样本做一个逻辑回归

2)然后对非零样本取log

3)再对log后的非零样本做回归

4)最后再把结果综合起来


Question 1005461: 如何获取pyspark DataFrame的行数和列数?

统计/机器学习 Python

在pandas里可以直接用df.shape(),但是pyspark的dataframe不支持shape。有没有类似的代码能够返回pyspark dataframe的行数和列数的?


Answer

Answer 1:


print((df.count(), len(df.columns)))

Question 1005527: keras里sparse_categorical_crossentropy和categorical_crossentropy什么不同?

统计/机器学习 Python 损失函数 TensorFlow

keras里sparse_categorical_crossentropy和categorical_crossentropy什么不同?两个可以混着用吗?


Answer

Answer 1:

都是计算多分类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

Answer 1:


>>> 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

Answer 1:


df['key'].apply(lambda x:x[:4]).tolist()

Question 1005573: 怎么在python中获取昨天的日期的字符串?

统计/机器学习 时间序列 Python

假如系统今天是2019年9月1号,怎么获取昨天的日期并转成字符串形式,比如‘20190831’。


Answer

Answer 1:


from datetime import datetime, timedelta
yesterday = (datetime.now() - timedelta(1)).strftime('%Y%m%d')

Question 1005595: pandas dataframe存入csv文件时怎么忽略dataframe中的index?

统计/机器学习 Python I/O

pandas dataframe存入csv文件时会把index也存入文件中,请问怎么避免把dataframe中的index也保存进去?


Answer

Answer 1:


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

Answer 1:

f应该是大写吧

from sklearn.model_selection import KFold

我这边试了没问题


Question 1005641: 为什么Keras和Pytorch都是把模型保存成h5的格式而不是pkl格式?

统计/机器学习 Python TensorFlow I/O

为什么Keras和Pytorch都是把模型保存成h5的格式而不是pkl格式?有特别的原因吗?


Answer

Answer 1:

不建议把神经网络模型或者数据集存成pkl格式,因为太占用空间了。h5更小。

在h5中100mb的模型,存到pkl里要300mb以上。

Answer 2:

可以保存为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数值?

统计/机器学习 数据可视化 Python

seaborn里提供了很多默认的颜色库,比如

import seaborn as sns

sns.set_palette("husl")

husl里有好几种颜色,我怎么可以获取每个颜色的rgb数值呢?


Answer

Answer 1:

显示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中元素的个数?

统计/机器学习 Python

array可能是1维的向量,可能是2维的矩阵,也可能是高维的张量,用a.shape只能得到每一维的个数,怎么可以得到array中元素的总个数呢?


Answer

Answer 1:

使用a.size,就可以了

Answer 2:


a.size

或者

np.prod(a.shape)

Question 1005658: python字符串形式的数值转成单个整数的list,怎么操作?

统计/机器学习 Python

我想要把字符串形式的数值转成单个整数的list,比如下面这个例子

'215' -> [2, 1, 5]

在python中该怎么操作?


Answer

Answer 1:


 list(map(int, "123"))
Answer 2:


s = '123'

digits = [int(x) for x in s]

Question 1005665: sklearn里的RandomForestClassifier和ExtraTreesClassifier有什么区别吗?

统计/机器学习 监督式学习 Python

sklearn里的RandomForestClassifier和ExtraTreesClassifier有什么区别吗?


Answer

Answer 1:

参考黄前志在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

Answer 1:


import pandas as pd
df = pd.DataFrame(columns=['a','b','c','d'])

Question 1005678: sparkml里的word2vec是基于哪种模型的?

统计/机器学习 自然语言处理 Python

word2vec有两种模型,一个是cbow,一个是skip-gram,sparkml里自带的word2vec用的是哪一种啊?


Answer

Answer 1:

是基于skip-gram的

官方文档的截图



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

Answer 1:

我试了一下,好像是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

Answer 1:

要看Date是index还是column,你可以试试下面这两个

df.loc[['2013-01-01', '2013-01-03']]

或者

df.loc[df['Date'].isin(['2013-01-01', '2013-01-03'])]
Answer 2:

中括号得是两个

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

Answer 1:


df = df.iloc[0:0].copy()
Answer 2:


df.drop(df.index, inplace=True)
Answer 3:


df_1 = df.drop(range(len(df)),axis=0)

Question 1005707: pandas groupby返回组内排序

统计/机器学习 数据预处理 Python

一个dataframe,其中三列,一列是'name',一列是'type',一列是'value',type是类型,我想返回每个type的value的排序,请问怎么操作?


Answer

Answer 1:


df.groupby('type', as_index=False)['value'].rank()
Answer 2:


df.groupby('type').apply(lambda x:x.sort_values(by = 'value'))

Question 1005746: print的时候报错:TypeError: unsupported operand type(s) for /: 'str' and 'int'

统计/机器学习 Python

python里用print的时候报错

seconds = 100

print('Total time: %.1f minutes'%seconds/60)

完全不明白为什么出错了,错误信息是

TypeError: unsupported operand type(s) for /: 'str' and 'int'


Answer

Answer 1:

你上面报错信息是说你用字符串和整数做了除法,自然就报错了。

你在seconds/60的周围少了一对括号,应该是

print('Total time: %.1f minutes'%(seconds/60))

Question 1005765: 怎么删除pandas dataframe中index重复的行?

统计/机器学习 Python

怎么删除pandas dataframe中index重复的行?某一列里有重复可以用drop_duplicates,index有重复该怎么去重?


Answer

Answer 1:


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

Answer 1:

tensorflow是比较底层,keras是tensorflow的接口,更便于使用。与其说是两个不同package,不如说keras是基于tensorflow的package。

keras适用于快速建立模型,但是如果需要很多个性化设置和更灵活的调整,可以使用keras的底层package,也就是tensorflow。

Answer 2:

貌似是在Theano和tensoflow上面封装的

Answer 3:

keras允许简单而快速的原型设计、用户友好,高度模块化,可扩展性、简单易学。30分钟上手。

keras的底层是tensorflow,以tensorflow为后端。Tensorflow更灵活,模块自定义程度更高,所以上手和原型设计没有keras快。


Question 1005777: 怎么把pandas dataframe中一列英文文本全部转成小写?

统计/机器学习 Python

我现在遇到一个问题,我的dataframe中有一列,姑且叫做'demo',这一列的内容都是英文字符串,其中有大写也有小写。我要怎么把大写全部转为小写呢?


Answer

Answer 1:

一行代码就搞定

my_df['demo'] = my_df['demo'].str.lower()
Answer 2:

这个问题跟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

Answer 1:

你每次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')
Answer 2:

随机森林本来也是具有随机性的,所有每个fold结果相差很正常。如果你增加树的数量,应该每个fold的结果会相近一些。如果你数据量不够大的话,建议把fold数少一些,比如3fold。


Question 1005796: python(matplotlib)中如何把折线图和柱状图画在一起?

统计/机器学习 数据可视化 Python

python(matplotlib)中如何把折线图和柱状图画在一起,达到如下这种效果?谢谢!



Answer

Answer 1:

代码如下

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

Answer 1:


df.columns = ['_'.join(col).rstrip('_') for col in df.columns.values]

新的列明就是['id', 'date', 'value_max', 'value_min']


Question 1005813: python 时间格式问题

统计/机器学习 Python


各位大佬好:

有一列日期格式显示为:,请问这种格式如和在python内转为这种形式呢?


Answer

Answer 1:

%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

Answer 1:


>>> 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 Python

ntree是不是sklearn的n_estimators?

mtry是max_features还是max_depth?


Answer

Answer 1:

ntree是python sklearn里的n_estimators

mtry是python sklearn里的max_features

R里没有最大深度这个参数


Question 1005830: 怎么在matplotlib的图中加入箭头标志注释?

统计/机器学习 数据可视化 Python

怎么在matplotlib的图中加入箭头标志注释?如下图的这种



Answer

Answer 1:

用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参量是什么意思?

统计/机器学习 监督式学习 Python

CatBoostClassifier里的rsm参量是什么意思?


Answer

Answer 1:

和xgboost sklearn api里的colsample_bytree是一个意思,意思是每次分裂时候选特征的比例,所以是一个(0, 1]之间的数

如果是1,表示所有特征都被考虑,如果是0.5,表示随机挑选一半特征,然后从中择优进行分裂

Answer 2:

rsm = ratio of sample,随机放入模型的数据量的比例。0.8就是随机选80%的数据放入模型。


Question 1005835: 怎么对pandas dataframe中的值进行查找替换?

统计/机器学习 Python

dataframe中所有等于100的数值,需要被替换成1000,该怎么进行这样的查找替换?


Answer

Answer 1:


df = df.replace(100, 1000)
Answer 2:


df.replace(100, 1000, inplace=True)



Question 1005843: pyspark中怎么对dataframe里的行按照列去重?

统计/机器学习 Python

pyspark中怎么对dataframe里的行按照列去重?有没有类似于pandas里drop_duplicates这样的函数?


Answer

Answer 1:


spark_df = spark_df.dropDuplicates(cols)

cols是list of column names


Question 1005856: python dataframe中有一列的内容很长,在jupyter里没有办法完全显示,怎么办?

统计/机器学习 Python

python dataframe中有一列的内容很长,在jupyter里没有办法完全显示,怎么办?

下图就是一列的内容没有显示完整,被省略号取代了



Answer

Answer 1:

设置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

Answer 1:

用keras就很方便啊,图像格式不重要,png,jpg都是一样的读取

>>> from keras.preprocessing.image import load_img, img_to_array

>>> img_array = img_to_array(load_img('my_img.png'))
Answer 2:


import imageio

arr = imageio.imread('figure.png')

Question 1005886: python里计算加权的相关系数?

统计/机器学习 描述性统计 Python

我知道numpy里有计算正常的相关系数的函数,请问如果是加权的相关系数怎么计算?

比如我在pandas的dataframe里有三列,一列x,一列y,还有一列是w,表示每行的权重,我怎么计算基于权重w的x和y的相关系数?


Answer

Answer 1:

可以使用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,其他位置的元素就是加权的相关系数

Answer 2:

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

Answer 1:

试试

data.groupby(['key1', 'key2']).agg({'y': 'mean'}).reset_index()

我以前也遇到过这个问题,后来就是这么解决的,不知道对你有没有帮助


Question 1005918: pyplot的散点图怎么画空心的点?

统计/机器学习 数据可视化 Python

pyplot的散点图怎么画空心的点,就是每个点的中间是白色,只有外围一圈是有颜色的?谢谢各位!


Answer

Answer 1:

如果是空心的话,应该设置facecolors='none',其实就是相当于是透明的

plt.scatter(data[:, 0], data[:, 1], facecolors='none', edgecolors='r')

如果中间是白色的话,就设置成facecolors='white'

效果如下



Question 1005919: 怎么用python生成一个二维码,扫码跳转到一个指定的网页?

统计/机器学习 Python

RT.

怎么用python生成一个二维码,扫码跳转到一个指定的网页?


Answer

Answer 1:

装一个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的函数?

统计/机器学习 推荐系统 模型验证 Python

sklearn,numpy里有没有计算ndcg的函数?


Answer

Answer 1:

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

Answer 1:


import datetime

print(datetime.datetime.now())

Question 1005966: 怎么把3D的numpy array显示为彩色图像并且保存?

统计/机器学习 计算机视觉 数据可视化 Python I/O

怎么把3D的numpy array显示为彩色图像并且保存?


Answer

Answer 1:

这里用matplotlib库实现,默认数据是numpy array,RGB通道排列的三维数据

from matplotlib import pyplot as plt
plt.imshow(data) 
# 这里默认是RGB通道排列,即(R,G,B),如果是其他通道表述可以通过data.transpose来调整
plt.savefig("./1.jpg")


Answer 2:

使用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')


Answer 3:

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数据框一个列字符串中每个字符串出现的次数?

统计/机器学习 Python

pandas的数据框中有一列都是字符串类型的,我想统计每一个字符串出现的次数

比如

id    type

0    'a'

1    'b'

2    'a'

统计下来就是'a'出现了两次,'b'出现了一次。

这个怎么做呢?


Answer

Answer 1:


df.type.value_counts()


Answer 2:


df['type']value_counts()

上面的结果返回一个series

或者

from collections import Counter

Counter(df['type'])

上面的结果返回一个dictionary


Question 1005975: python中怎么描绘召回-精度曲线?

统计/机器学习 监督式学习 模型验证 数据可视化 Python

我在sklearn中训练好一个二元分类模型,得到预测概率p,对比真实01值y,我怎么可以描绘召回-精度曲线?


Answer

Answer 1:


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

Answer 1:

不能直接设定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

Answer 1:

y轴不是比重,而是概率密度。

每个柱子的面积代表概率,而不是高度。

高度乘以宽度,得到面积(也就是概率);面积的和是等于1。


Question 1005981: gensim的word2vec模型是skip-gram还是cbow?

统计/机器学习 自然语言处理 Python

gensim的word2vec模型是skip-gram还是cbow?怎么使用skip-gram作为模型进行训练?


Answer

Answer 1:

默认的设置是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

Answer 1:

输入的两个变量需要是2维的array,而不是向量,这样就可以了

cosine_similarity(np.array([[1, 2]]), np.array([[2, 1]]))

Question 1006025: gensim里word2vec的window指的是什么?包括的范围是多大?

统计/机器学习 自然语言处理 Python

gensim里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

Answer 1:

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

Answer 1:


linear就是普通的线性增长模式,logistic是一种存在上下限的模式,类似下面Logistic曲线


具体选择要看你预测模型的业务背景,如果是做一些类似市场份额的预测,因为存在着总量天花板(比如因为人口、环境的限制,不可能一直快速增长,总会到达一个饱和点),可以选择logistic;一般情况下都是使用linear,prophet默认应该也是选择的linear。


Question 1006042: 使用pandas.to_datetime转化文本到时间戳时怎么只保留日期?

统计/机器学习 Python

pandas.to_datetime转化文本到时间时,默认选项是既有日期也有具体的时刻,即使文本中没有几点几分的信息

>>> pd.to_datetime('2019-11-11')

Timestamp('2019-11-11 00:00:00')

怎么只保留日期?


Answer

Answer 1:

pd.to_datetime('2019-11-11').date() ?

Answer 2:

如果你是转换一个日期

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

Answer 1:

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训练好之后每棵树的叶节点的个数?

统计/机器学习 监督式学习 Python

sklearn里的RandomForestClassifier训练好之后每棵树的结构都不大一样,比如叶节点的个数很可能不同。

怎么获得随机森林中每棵树的叶节点的个数?


Answer

Answer 1:

如果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

Answer 1:

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 TensorFlow

tensorflow里两个变量相加可以通过tf.add(x, y)完成,也可以直接x+y。这两个有区别吗?


Answer

Answer 1:

tf.add(x, y)和x+y在运算上没有区别

tf.add(x, y)的的优势是可以利用tf.add(x, y, name)中的name来对操作进行命名

Answer 2:

我觉得两者完全是等价的


Question 1006079: adaboost里的feature importance和随机森林里的feature importance是一回事吗?

统计/机器学习 监督式学习 特征选择 Python

sklearn里这两个模型都有feature_importances_,这个特征重要性在这两个不同算法中是一回事吗?


Answer

Answer 1:

算法差不多,每个树里都可以算出一个feature importance,Random Forest是对每棵树的feature importance求均值,Adaboost是对每棵树的feature importance求加权均值。


Question 1006084: numpy里的np.newaxis有什么用?

统计/机器学习 Python

numpy里的np.newaxis有什么用?


Answer

Answer 1:

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

Answer 1:

是的,多元分类是需要softmax激活函数的。

但是,pytorch中的CrossEntropyLoss已经包含了softmax这个过程了,所以在pytorch中不需要softmax,直接用linear的结果就可以了。可以看下官方文档https://pytorch.org/docs/stable/nn.html#crossentropyloss


Answer 2:

謝謝,又學了一樣


Question 1006104: python中如何实现保序回归算法?

统计/机器学习 回归分析 Python

python中如何实现保序回归算法?求指导!


Answer

Answer 1:

sklearn保序回归Isotonic Regression官方文档

Isotonic Regression的使用和可视化的例子


Question 1006106: corss_val_score的scoring='accuracy'可以执行,使用其它参数报错

统计/机器学习 监督式学习 模型验证 Python

C:\Users\wwwwww>python
Python 3.6.1 |Anaconda 4.4.0 (64-bit)| (default, May 11 2017, 13:25:24) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from sklearn.model_selection import cross_val_score
>>> from sklearn.datasets import load_iris
>>> from sklearn.ensemble import RandomForestClassifier
>>> forest = RandomForestClassifier(n_estimators=100,random_state=1)
>>> cross_val_score(forest,load_iris().data,load_iris().target,scoring='accuracy',cv=5)
array([ 0.96666667, 0.96666667, 0.93333333, 0.96666667, 1. ])
>>> cross_val_score(forest,load_iris().data,load_iris().target,scoring='precision',cv=5)
Traceback (most recent call last):
  File "", line 1, in
  File "E:\dsj-software\Anaconda3-4.4.0\lib\site-packages\sklearn\model_selection\_validation.py", line 140, in cross_val_score
    for train, test in cv_iter)
  File "E:\dsj-software\Anaconda3-4.4.0\lib\site-packages\sklearn\externals\joblib\parallel.py", line 758, in __call__
    while self.dispatch_one_batch(iterator):
  File "E:\dsj-software\Anaconda3-4.4.0\lib\site-packages\sklearn\metrics\classification.py", line 1018, in precision_recall_fscore_support
    "choose another average setting." % y_type)
ValueError: Target is multiclass but average='binary'. Please choose another average setting.
>>>


Answer

Answer 1:


ValueError: Target is multiclass but average='binary'. Please choose another average setting.

错误信息已经告诉你了,你在做多元分类,但是你用的是二元分类的scoring,所以报错了


Question 1006113: pandas新建一个只有一行的dataframe时结果返回空的dataframe

统计/机器学习 Python

我的操作如下


不知道为什么是空的,谢谢!


Answer

Answer 1:


df['x'] = [1]



Question 1006122: 怎么把训练好的bin格式的word2vec模型导入到gensim中使用?

统计/机器学习 自然语言处理 Python

我在网上下载了一个训练好的word2vec的模型,文件后缀是bin,然后怎么导入到gensim来使用呢?


Answer

Answer 1:


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

Answer 1:


spark.catalog.refreshTable("my_table")


Answer 2:


sql_context.sql("REFRESH TABLE table_name")


Answer 3:


import org.apache.spark.sql.hive.HiveContext
hiveContext.refreshTable("tableName")



Question 1006147: 如何生成一个二元分类的数据集?

统计/机器学习 监督式学习 Python

我想试验一下一个算法,需要一个二元分类的数据集(数据是多维的)做simulation,这种数据集该怎么生成呢?最好是python的,不一定需要具体的代码,思路也可以


Answer

Answer 1:

了解一下sklearn里的sklearn.datasets.make_classification

可以生成binary classification的数据集,维度的数量也可以直接设置,维度的相关性也可以设置,非常方便


Question 1006183: spark sql里怎么用case when?

统计/机器学习 Python mysql

spark sql有没有类似mysql里的case when?怎么用?


Answer

Answer 1:

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怎么求一列的移动中位数?

统计/机器学习 数据预处理 Python

pandas怎么求一列的移动中位数?


Answer

Answer 1:

这个和求移动平均数差不多

df['a'].rolling(window=3).median()



Question 1006198: python倒序的range

统计/机器学习 Python

range(1, 5)可以得到[1, 2, 3, 4]

range(5, 1)可以得到[4, 3, 2, 1]结果却是空

怎么实现倒序的range?


Answer

Answer 1:


range(1, 5)[::-1]

或者

range(4, 0, -1)



Question 1006202: gensim.models.word2vec模块的LineSentence有什么用?

统计/机器学习 自然语言处理 Python

gensim.models.word2vec模块的LineSentence有什么用?


Answer

Answer 1:

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

Answer 1:

假设数据框的变量名为df

# 删除第k行
df.drop(df.index[k])
# 删除第i,j,k行
df.drop(df.index[[i, j, k]])


Answer 2:


#删除第k行
new_df = pd.concat([df.iloc[:k], df.iloc[k+1:]])



Question 1006322: datetime模块里的datetime.combine什么用?

统计/机器学习 时间序列 Python

datetime模块里的datetime.combine什么用?


Answer

Answer 1:

时间戳是包含年-月-日,时-分-秒的。combine就是把年月日和时分秒合并在一起,得到一个完整的时间戳。

import datetime
datetime.datetime.combine(datetime.date.today(), datetime.time.min)

比如上面的例子就是把今天的日期和0点0分合并在一起,得到时间戳。


Question 1007354: numpy里面resize和reshape的区别是什么?

统计/机器学习 Python

请问numpy里面resize和reshape的区别是什么?使用场景分别是什么?


Answer

Answer 1:

对于一个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,训练前对数据特征赋予权重是否对结果有影响

统计/机器学习 监督式学习 数据预处理 特征选择 Python

8000个7特征的样本数据,对第四列的特征乘上不同的系数,为什么对于得到的训练结果没有影响


Answer

Answer 1:

对于树模型(决策树、随机森林、xgboost,lightgbm),对特征进行保序变换是不会影响模型结果的。

因为树在寻找到特征分裂点之后,小于它的样本都被放在左子节点,大于它的样本都在右子节点。你对一个特征做了乘法运算,这个是线性运算,自然也是保序的,也就是每个元素的大小顺序没有改变,所以训练出来的模型自然没有变化。


Question 1007389: 如何在日期序列中补齐缺失的日期

统计/机器学习 数据预处理 时间序列 Python

有一个如下的excel  

期望每天有一行数据

如果出现09/01/2019   09/04/2019

如何插入两行数据 09/02/2019  09/03/2019



Answer

Answer 1:

你可以建一个完整的日期的dataframe,然后把两个dataframe join起来

参考这个解答的第一部分http://sofasofa.io/forum_main_post.php?postid=1003719


Question 1007392: 把分组频数统计的结果添加到原来dataframe中

统计/机器学习 数据预处理 Python

print(data.groupby(by=['ID'], as_index=False).count())

只能产生分组频数统计

----------------------

0 a

1 a

2 b

但是我期望结果是

0 a 2

1 a 2

2 b 1


这种如何解决


Answer

Answer 1:

用transform,然后可以把结果作为新的一列count_ID插入到dataframe里

data['count_ID'] = data.groupby('ID')['ID'].transform('count')



Question 1007397: matplotlib怎么强行隐藏图像?

统计/机器学习 数据可视化 Python

正常情况下,我们在结尾加上plt.show(),作的图像就会显示出来了。如果我不想让图像出现,该怎么办?我把plt.show()这行给去掉了也没用。


Answer

Answer 1:

plt.show()

换成

plt.close()



Question 1007405: 在jupyter notebook里显示pandas的DataFrame如何隐藏index这列?

统计/机器学习 Python

在jupyter notebook里我用display这个命令显示dataframe,但是它会一起显示index这列。index这列对我来说没有意义,该怎么隐藏index这列呢?


Answer

Answer 1:


from IPython.display import HTML
HTML(df.to_html(index=False))



Question 1007426: SHAP太慢了,该怎么解决?

统计/机器学习 特征选择 数据可视化 Python

吐槽一下python里的SHAP,实在太慢了,三十万左右的数据量一百个特征,基本上跑不出来。有什么替代方案吗?


Answer

Answer 1:

Github上有一个讨论,供参考

How to speed up SHAP computation


Question 1007432: 请问在sklearn怎么在已有的模型的基础上训练新的数据?

统计/机器学习 监督式学习 Python

之前已经在sklearn里训练好了一个分类模型,现在因为有了新的训练数据,如何在之前模型的基础之上利用新数据更新模型呢?

谢谢~!


Answer

Answer 1:

只要有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

Answer 2:

假设模型有N个可训练参数,一个训练好的模型是N维参数空间一点。当训练数据确定后,loss function是一曲面,训练就是找到局部或全局最小值。新加入数据后,loss对应曲面会变化,要从上次最小值开始找新的最小值。(loss曲面在每个mini batch都会变,只是训练次数多了,统计意义上相当于一个曲面,可理解为曲面的平均。)

需要注意的是新旧数据比例,学习率 learning rate,学习次数。需要设置提前结束条件,也不能只用新数据训练,否则很容易过拟合到新数据,而“忘记”旧数据。

Answer 3:

继续fit



Question 1007457: 如何修改hist()直方图纵轴的取值范围(表示的概率)?

统计/机器学习 概率分布 数据可视化 Python


图2  的纵轴范围变成图1 的,求大神帮忙,谢谢啦!



Answer

Answer 1:

设置一下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)

统计/机器学习 监督式学习 推荐系统 特征选择 Python


X_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

Answer 1:

你把关键代码复制一下,不然也不知道你的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

Answer 1:

pyspark的函数里有date_format,可以让日期变为week of year

from pyspark.sql import functions as F

把日期dt这列变成第几周的代码是

F.date_format(F.col('dt'), 'w')

然后得到的数就是表示是该年度中的第几周

Answer 2:


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

Answer 1:

你用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补齐没有的行呢

统计/机器学习 数据预处理 Python

df怎么根据weekgroup补齐没有的行呢

设想weekgroup 是0 1 2 3 4 --weekmax

比如下图pid=297157的时候补8 9 11 13 15 14 16 .... 



Answer

Answer 1:



Question 1007545: 问句python语法含义

统计/机器学习 Python

urban是dataframe

如果c7002含有.n  变成none  是字符呢  还是空值呢

urban.loc[urban['c7002'].isin(['.n','.r','.d']),'c7002']=None


Answer

Answer 1:

None就是空值


Question 1007564: str.replace为什么会将数字替换成NaN

统计/机器学习 数据预处理 Python


df = pd.DataFrame({'sales':[100,'$5','5,600',4564]})
df['sales'].str.replace('$','')

为什么会将数字替换成NaN


df['sales'].str.replace('$','')

df['sales'].replace('$','')  区别是啥


Answer

Answer 1:

df['sales'].str 这个会把非str类型转换成NaN

df['sales'].str.replace('$','') 是对数据操作

df['sales'].replace('$','') 是对列操作


Question 1007572: 怎么把statsmodels训练的模型本地保存?

统计/机器学习 Python I/O

怎么把statsmodels训练的模型本地保存?


Answer

Answer 1:

就是正常的存储读取,用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

Answer 1:

感觉pandas的crosstab可以满足你的要求

pandas.crosstab

Answer 2:

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

Answer 1:

这个问题是因为,学习一个最优决策树是一个NP问题。 所以实际应用中,生成决策树是基于启发式算法的,比如贪婪算法,贪婪算法可以在每个节点进行局部最优点求解,但它无法保证返回全局最优解。不论是random forest还是decision tree,贪婪算法会随机且多次抽取部分特征和样本,这个随机抽取过程可以通过random_state来决定。

顺便提一嘴,挺有名的教程《Hands-On Machine Learning with Scikit-Learn and TensorFlow总是使用random_state=42, 当然实际中random_state可以选择任何一个数值。

Reference: 

1. stackoverflow 

2. scikit-learn decision tree


Question 1007596: plt.scatter中c参数和cmap参数的区别是什么?

统计/机器学习 数据可视化 Python

plt.scatter中c参数可以一个list来控制颜色,cmap也是控制颜色的,这两个参数有什么区别呢?


Answer

Answer 1:

两者没有冲突的。

如果你不设置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

Answer 1:

这种用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

Answer 1:

我个人的习惯是把已经二元化的变量跳过,只对非二元的数值特征进行标准化。

如果你有时间富余,可以两者方式都试试,交叉验证一下,看哪个效果好。我的经验是通常两种方法效果差不多。所以本质上没差别。

Answer 2:

以神经网络为例说明为什么要标准化输入输出。假如输入输出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画图 没有显示

统计/机器学习 数据可视化 Python


from 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

Answer 1:

你试试加一个.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

Answer 1:


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)


Answer 2:

我也写了一个循环,不知道有没有帮助

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

Answer 1:
你看看你的第59行代码,而且你把第58行以后的代码都藏起来了,怕是没人能猜到你的错误哟

Question 1021946: 特征组合的重要性排序

统计/机器学习 监督式学习 特征选择 Python

随机森林可以得到单个特征的重要性,有什么方法可以得到特征组合的重要性排序呢?例如有特征{F1,F2,F3......},得到{F1,F2}是最重要的,{F1,F3}是次重要的......


Answer

Answer 1:

不大明白你这么做的意义是什么,你的例子里说“{F1,F2}是最重要的,{F1,F3}是次重要”,这个是不是就是说F1最重要,其次F2,然后F3?那就等价于用了单特征的重要性。

如果非要组合在一起看,我觉得你不如做一些特征工程,把{F1,F2}组成一个新特征,{F1,F3}组成一个新特征。把新特征放到模型里,自然就可以比较了。


Question 1021995: 怎么给seaborn的heatmap里光谱柱添加名称?

统计/机器学习 数据可视化 Python


如上图所示,最右边的那个表示颜色和数值对应的,光谱柱怎么给它添加文本名称?


Answer

Answer 1:

在heatmap里设置cbar_kws,但是显示在侧面,不是光谱的上面

sns.heatmap(np.random.uniform(0,1,[5,4]), cbar_kws={"label": "图例名称xxxx"})
plt.show()



Question 1022057: permutation importance

统计/机器学习 监督式学习 Python

permutation importance 原理是每次打乱一个特征看模型预测能力下降多少来判断特征重要性,那是否可以每次打乱两个特征,以此得到哪两个特征对模型预测是最重要的?



Answer

Answer 1:

我觉得是可以的。

唯一的问题就是可能会有点慢,如果一共有500个特征,你需要跑500*499/2=124750次。


Question 1022078: 如何用matplotlib画出坐标与函数点有连线的散点图?

统计/机器学习 数据可视化 Python

应该有不用写循环就将每一个坐标点与函数点相连的方法吧。


Answer

Answer 1:

示例

plt.stem(x, y, markerfmt='C1o')
plt.plot(x, y)
plt.show()


Answer 2:

又看了看官网的API,发现自己漏看了stem()方法。用stem()即可实现。


Question 1022080: 怎么对pandas dataframe按照一列的字符串的长度来排序?

统计/机器学习 Python

我有一个很宽的pandas dataframe,其中有一列名称为description,这一列是文本。我想按照这一列中文本的长度从长到短对dataframe中的每一行重新排序。

我试了直接用df.sort_values('description', ascending=False),得不到以上效果。那应该怎么做?

谢谢各位!


Answer

Answer 1:


new_df = df.reindex(df['description'].str.len().sort_values(ascending=False).index)


Answer 2:

我想到的办法就是新插入一列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

Answer 1:

最方便的就是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

Answer 1:

截距

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

Answer 1:


df.groupby('id').apply(lambda x:','.join(x['text']))


Answer 2:


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

Answer 1:

设置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

Answer 1:


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

Answer 1:

sklearn里有现成的模块实现你的要求,官方文档里有例子

链接sklearn.preprocessing.MultiLabelBinarizer.html


Question 1022138: matplotlib画双y轴时,怎么隐藏右y轴的坐标网格线?

统计/机器学习 数据可视化 Python

如图所示,我用了twinx画了双y轴,但是图上会同时出现左y轴和右y轴的白色网格线,两个网格线有点太乱了。

我怎么才能隐藏掉右y轴对应的坐标网格线,让它不显示呢?


Answer

Answer 1:


# 新建画板
fig, ax1 = plt.subplots(figsize=(10, 6))
# 新建右y轴
ax2 = ax1.twinx()
# 隐藏右y坐标轴的网格线
ax2.grid(False) 



Question 1022143: pandas dataframe 日期间隔天数计算问题

统计/机器学习 数据预处理 时间序列 Python


dataframe中有两列数据'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

Answer 1:

不需要你写的那么复杂吧

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

Answer 1:


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

Answer 1:

eval 也行,但建议用 json.loads

import json
json_str = '{"firstname":"David","surname":"John","age":32, "hobbies": [0, 2, 7]}'
json_obj = json.loads(json_str)


Answer 2:


my_texts = '{"firstname":"David","surname":"John","age":32, "hobbies": [0, 2, 7]}'
my_dict = eval(my_texts)

eval是python内自带的函数

Answer 3:

json.loads()

Answer 4:

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

Answer 1:

直接import就行了

import joblib



Question 1022178: jieba.cut中use_paddle是什么模式?

统计/机器学习 自然语言处理 Python

jieba.cut分词时可以设置use_paddle,这种情形下的分词是什么模式的?与默认的方式有什么不同吗?


Answer

Answer 1:

精确模式:试图将句子最精确的切开,适合文本分析;

全模式: 把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义;

搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

paddle模式: 预先利用PaddlePaddle,训练的序列标注模型来实现分词,支持词性标注;paddle模式使用需安装paddlepaddle-tiny


Question 1022207: python中怎么获取每月的最后一天的日期?

统计/机器学习 Python

python中怎么获取每月的最后一天?比如2019年11月,最后一天是'2019-11-30';比如2020年2月,最后一天是'2020-02-29'。


Answer

Answer 1:

可以用calendar 获取每月的总天数,总天数就是每月的最后一天。

>>> import calendar
>>> calendar.monthrange(2020,2)[1]
29
>>> calendar.monthrange(2019,11)[1]
30
Answer 2:


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

Answer 1:

可以尝试一下 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

Answer 1:

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的行?

统计/机器学习 数据预处理 Python

pandas中有的行里包含空、null或者nan,怎么可以快速删去这些行呢?


Answer

Answer 2:

df = df.fillna()  # 缺失值填充

df = df.dropna() # 缺失值删除 


Question 1022256: sklearn GridSearchCV的结果cv_results_怎么转成pandas的DataFrame?

统计/机器学习 模型验证 Python

GridSearchCV的结果cv_results_怎么转成pandas的DataFrame?


Answer

Answer 1:

直接用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/O

python能不能直接读取word文本,doc或者docx文件?


Answer


Question 1022305: python怎么只保留某列前几个数字

统计/机器学习 Python

比如

name              date 

   a              20110928

   b              20121124

   c              20130326

把date保留成

2011

2012

2013


谢谢


Answer

Answer 1:

假定你的文件是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


Answer 2:


import pandas as pd
df.date = df.date.apply(lambda x: str(x)[:4]) # 这里要看你原始date列的类型

解决了


Question 1022306: python函数:

统计/机器学习 Python

company       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

Answer 1:

感觉跑循环可以解决。

嵌套循环,对每一个公司,然后循环年份。


Question 1022366: python里怎么安装CatBoostClassifier?

统计/机器学习 监督式学习 Python

请问python里怎么安装?


Answer

Answer 1:

Linux系统里可以直接安装

pip install catboost



Question 1022377: 机器学习中如何将几种度量距离的量进行线性组合

统计/机器学习 监督式学习 数据预处理 Python

在机器学习中如何将度量距离的量D1和D2进行线性组合,得到D=r1*D1+r2*D2,(D1:欧几里得距离,D2=1-T,其中T表示Tanimoto similarity index)


Answer

Answer 1:

具体的看你用什么模型啊,你的问题没头没尾。

提问题的应该

1. 说明你要做的是啥任务,用的是啥类型的数据,用的是啥模型,

2. 问题是啥

3. 如何解决这个问题


Question 1022423: EM

统计/机器学习 无监督学习 数据预处理 Python

请问如何使用GMM与EM算法的Python实现三维数据的处理



Answer

Answer 1:

学会使用GitHub 

https://github.com/pmelchior/pygmmis


Question 1022470: pandas变形

统计/机器学习 Python

1 3

2 4

a c

b d


变成

1 2 3 4

a b c d

就是偶数行变成列上  r*c  变成 r/2 * 2c


两种格式相互变


Answer

Answer 1:

使用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

Answer 1:

这个主要是为了防止循环引用出现的差错,比如说这种

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

Answer 1:

可以参考下dtw-python,https://pypi.org/project/dtw-python/

可以通过pip直接按照

pip install dtw-python



Question 1655946: 怎么利用python批量替换多个txt文件中的文字片段?

统计/机器学习 Python

请教一下各位,假如我有1.txt,2.txt,...,100.txt这100个文本文件,其中大部分文件中包含"xyz123"这个字符串,我想利用Python把所有文件中的"xyz123"换成"abc456"。

为了达到这个目标,代码改如何实现,有没有现成的函数呢?


Answer

Answer 1:

按行来读取文本,然后用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里怎么计算曼哈顿距离?

统计/机器学习 描述性统计 Python

python里怎么计算两个向量的曼哈顿距离?


Answer

Answer 1:

曼哈顿距离其实就是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))


Answer 2:

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中的缺失数值?

统计/机器学习 Python

dataframe中有些行的部分单元格数据空缺,怎么根据就近原则来进行填充呢?就是用上一行的数据填充到下一行空缺的单元格内。


Answer

Answer 1:

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

Answer 1:

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

Answer 1:

按照年份顺序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

Answer 1:

一个方法是在在最上面声明matplotlib inline

%matplotlib inline

import matplotlib.pyplot as plt

另外一个方法是不调用pandas的hist,直接用plt的

plt.hist(rndints)

plt.show()


Answer 2:

在最前面加上%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

Answer 1:

看来下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

Answer 1:

np.genfromtxt

import numpy as np

arr = np.genfromtxt(filepath, delimiter=',')



来自sofasofa(一个专业的机器学习社区),建议去sofa社区阅读,这里只是记录。防止网站在网络中走失。