sklearn 朴素贝叶斯

朴素贝叶斯是基于贝叶斯理论的一种监督学习算法,『朴素』意思是假设所有特征两两相互独立,给出类别y和一组依赖特征[x1..xn],根据贝叶斯理论,他们有如下的关系。

P(y|x1,...xn)=P(y)P(x1,...xn|y)P(x1,...xn)

根据贝叶斯独立性假设

P(xi|y,x1,...,xi1,...,xn)=P(xi|y)

对于所有的i,关系可以简化为

P(y|x1,...xn)=P(y)ni=1P(xi|y)P(x1,....,xn)

因为P(x1,…,xn)}是给出的,所以我们可以做如下的近似

P(y|x1,...xn)=P(y)ni=1P(xi|y)P(x1,....,xn)

yˆ=argmaxyP(y)i=1nP(xi|y)

我们可以用最大后验估计去估计P(Y)和P(xi | y),前者的相对频率可以通过训练数据集计算出来。

不同的朴素贝叶斯分类器的差异主要在于用了不同的关于P(xi|y)分布的假设。

尽管朴素贝叶斯过于简化假设,但在实际文件分类和垃圾邮件过滤中分类效果相当不错。朴素贝叶斯只需要少量的训练数据来估计必要的参数。(朴素贝叶斯效果好以及它适合哪种类型的数据理论解释,可参考下面的文献)

朴素贝叶斯学习器和分类器和一些复杂的方法相比,可以做到非常快。每个特征分布的解耦,意味着每个分布可以独立地当成一维去估计。这反过来又有助于缓解来自维数灾难的问题。

另一方面,虽然朴素贝叶斯以分类器著称,但它是一个坏的估计,所以不必计较从predict_proba得到的概率输出。

References:

H. Zhang (2004). The optimality of Naive Bayes. Proc. FLAIRS.

发布了233 篇原创文章 · 获赞 567 · 访问量 50万+
展开阅读全文

Python全局环境下sklearn包中缺失Imputer函数

12-15

系统win10 64位,python版本3.7.4。 全局环境下,在我输入下载sklearn包的代码后,显示结果如下,包已经安装: ``` pip install sklearn Requirement already satisfied: sklearn in e:\python\lib\site-packages (0.0) Requirement already satisfied: scikit-learn in e:\python\lib\site-packages (from sklearn) (0.22) Requirement already satisfied: numpy>=1.11.0 in e:\python\lib\site-packages (from scikit-learn->sklearn) (1.17.4) Requirement already satisfied: scipy>=0.17.0 in e:\python\lib\site-packages (from scikit-learn->sklearn) (1.3.3) Requirement already satisfied: joblib>=0.11 in e:\python\lib\site-packages (from scikit-learn->sklearn) (0.14.1) ``` 然而在使用sklearn中的Imputer函数时,会出现报错: ``` >>> import numpy as np >>> import sklearn >>> from sklearn import preprocessing >>> from sklearn.preprocessing import Imputer Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: cannot import name 'Imputer' from 'sklearn.preprocessing' (E:\python\lib\site-packages\sklearn\preprocessing\__init__.py) ``` 利用dir()查看包内的函数,发现没有Imputer: ``` >>> dir(sklearn.preprocessing) ['Binarizer', 'FunctionTransformer', 'KBinsDiscretizer', 'KernelCenterer', 'LabelBinarizer', 'LabelEncoder', 'MaxAbsScaler', 'MinMaxScaler', 'MultiLabelBinarizer', 'Normalizer', 'OneHotEncoder', 'OrdinalEncoder', 'PolynomialFeatures', 'PowerTransformer', 'QuantileTransformer', 'RobustScaler', 'StandardScaler', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '_csr_polynomial_expansion', '_data', '_discretization', '_encoders', '_function_transformer', '_label', 'add_dummy_feature', 'binarize', 'label_binarize', 'maxabs_scale', 'minmax_scale', 'normalize', 'power_transform', 'quantile_transform', 'robust_scale', 'scale'] ``` 但是在conda的base环境下,陆续安装numpy、scipy、matplotlib后,安装 scikit-learn包,就可以使用这个函数了。 我寻找了很久的解决方案,网上说的路径和Imputer相同的情况没有发生,请问大佬们这究竟是怎么回事儿啊 问答

用sklearn做线性回归, 但数据normalization后,出来MSE全部为0。

12-09

用sklearn在股票价格数据 做线性回归, 但数据normalization后,出来MSE的结果全部为0。别人说是模型出错了, 但奈何自己是python新手,请求各位帮忙指出其中原因,感谢感谢!!!! 数据是这样子的: ![图片说明](https://img-ask.csdn.net/upload/201812/09/1544362511_813119.jpg) 这是不加normalization的, ``` from sklearn.linear_model import LinearRegression from sklearn import cross_validation from sklearn.model_selection import train_test_split from sklearn.preprocessing import Normalizer LinearRegression=LinearRegression() scores = cross_validation.cross_val_score(LinearRegression, X_stock1_train, y_stock1_train, scoring='neg_mean_squared_error', cv=10) print (-scores) print ('Average score for Linear Regression:', np.mean(scores)) ``` 结果看起来还算正常: [ 0.03666889 0.05985924 0.05718805 0.04757506 0.05605501 0.05602068 0.04308263 0.05089644 0.0489978 0.0384472 ] Average score for Linear Regression: -0.0494790998005 ##分割线## normalization处理过的: ``` from sklearn.linear_model import LinearRegression from sklearn import cross_validation transformer=Normalizer().fit(X_stock1_train, y_stock1_train) X_stock1_train=transformer.transform(X_stock1_train) y_stock1_train=transformer.transform(y_stock1_train) LinearRegression=LinearRegression() scores = cross_validation.cross_val_score(LinearRegression, X_stock1_train, y_stock1_train, scoring='neg_mean_squared_error', cv=10) print (-scores) print ('Average score for Linear Regression:', np.mean(scores)) ``` 结果: [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] Average score for Linear Regression: 0.0 别人说是模型出错了, 但奈何自己是python新手,请求各位帮忙指出其中原因,感谢感谢!!! 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 猿与汪的秘密 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览