1. 环境搭建

l  Python安装包:www.python.org

l  Microsoft Visual C++ Compiler for Python

l  pip(get-pip.py):pip.pypa.io/en/latest/installing.html

n  pip install + 安装包          --安装包(.whl,.tar.gz,.zip)

n  pip uninstall + 安装包        --卸载包

n  pip show --files + 安装包     --查看已安装包信息

n  pip list outdated             --查看待更新包信息

n  pip install -U + 安装包          --升级包

n  pip search + 安装包            --搜索包

n  pip help                       --显示帮助信息

l  Anaconda:continuum.io/downloads

n  conda install + 安装包

n  conda uninstall + 安装包

l  一些常用包:www.lfd.uci.edu/~gohlke/pythonlibs/

n  re:正则匹配;os:文件操作;random:随机数;time:时间戳

n  requests:网页交互(get & post)

n  beautifulsoup4:用于规范化的静态网页的分析

mysqlclient、PyMySQL:Mysql数据库操作接口

n  numpy+mkl:矩阵运算

n  scipy:科学计算(插值,积分,优化,图像处理,特殊函数)

n  matplotlib:图形绘制

scikit-learn:机器学习库

n  jieba、smallseg:中文分词  https://pypi.python.org/pypi/jieba/

n  pandas:大型数据处理

n  nltk:提供50多个语料库和词典资源(分类、分词、词干提取、解析、语义推理)

n  Pattern:拥有一系列的自然语言处理工具,词性标注工具(Part-Of-Speech Tagger),N元搜索(n-gram search),情感分析(sentiment analysis),WordNet,也支持机器学习的向量空间模型,聚类,向量机。

n  TextBlob:处理文本数据(词性标注、名词短语抽取、情感分析、分类、翻译)

n  Gensim:用于对大型语料库进行主题建模、文件索引、相似度检索等,可以处理大于内存的输入数据

n  PyNLPI

n  spaCy:一个商业的开源软件,结合了Python和Cython的NLP工具

n  Polyglot:支持大规模多语言应用程序的处理(165种语言的分词,196种语言的辨识,40种语言的专有名词识别,16种语言的词性标注,136种语言的情感分析,137种语言的嵌入,135种语言的形态分析,以及69种语言的翻译)

n  MontyLingua:免费的、功能强大的、端到端的英文处理工具,适用于信息检索和提取,请求处理,问答系统,能词性标注和实体识别一些语义信息。

n  BLLIP Parser:集成了生成成分分析器和最大熵排序的统计自然语言分析器

n  Quepy:提供了将自然语言问题转换成为数据库查询语言中的查询

n  PIL:图像处理

n  xgboost(eXtreme Gradient Boosting):梯度上升算法

2. 常用命令

l  python XXX.py                --运行程序

l  python setup.py build        --编译,须在setup.py所在目录下

l  python setup.py install       --安装,同上

l  python setup.py sdist         --制作分发包,同上

l  python setup.py bdist_wininst --制作windows下的分发包,同上

3. 标准定义

#!usr/bin/python

# -*- coding: utf-8 -*-

# encoding=utf-8

from distutils.core import setup

import sys

reload(sys)

sys.setdefaultencoding('utf8')

# 安装包打包

setup(name="example", version="v1.0.0", description="setup_examples", author="SweetYu", py_modules=['文件夹1.文档1','文件夹1.文档2','文件夹2.文档3'])

#类的定义

class A:

__count = 0             # 私有类变量

def __init__(self, name):

self.name = name   # 公有成员变量

A.__count += 1

@classmethod

def getCount(cls):     # 类函数

return cls.__count

def getName(self):     # 成员函数

return self.name

if __name__ == '__main__':

main()

4. json、string、random、re

正则表达式(Res,regex pattens)

l  元符号

.表示任意字符

[]用来匹配一个指定的字符类别

^ 取非

* 前一个字符重复0到无穷次

$ 前一个字符重复1到无穷次

?前一个字符重复0到1次

{m}前一个字符重复m次

l  特殊匹配

\d 匹配任何十进制数,相当于类 [0-9]。

\D 匹配任何非数字字符,相当于类 [^0-9]

\s 匹配任何空白字符,相当于类 [ fv]

\S 匹配任何非空白字符,相当于类 [^ fv]

\w 匹配任何字母数字字符,相当于类 [a-zA-Z0-9_]

\W 匹配任何非字母数字字符,相当于类 [^a-zA-Z0-9_]

import json, os, re, time

import string, random

obj = [[1,2,3],123,123.123,'abc',{'key1':(1,2,3),'key2':(4,5,6)}]

encode_obj = json.dumps(obj, skipkeys=True, sort_keys=True)    #将对象转换成字符串

decode_obj = json.loads(encode_obj)             #将字符串转换成对象

random.randint(0,255)       #获取0~255范围内的整数

field = string.letters + string.digits #大小写字母+数字

random.sample(field,5)     #获取长度为5的field范围内的随机字符串

#文件处理

fp = open(filename,"w", encoding='utf-8-sig')  # 'w', 'w+', 'r', 'r+', 'a', 'a+'

fp.write(unicode("\xEF\xBB\xBF", "utf-8"))       #写到文件开头,指示文件为UTF-8编码

fp.close()

m = re.search("^ab+","asdfabbbb")    # m.group() à 'abbbb'

re.findall("^a\w+","abcdfa\na1b2c3",re.MULTILINE)

re.findall("a{2,4}","aaaaaaaa")      # ['aaaa', 'aaaa']

re.findall("a{2,4}?","aaaaaaaa")     # ['aa', 'aa', 'aa', 'aa']

re.split("[a-zA-Z]+","0A3b9z")      # ['0', '3', '9', '']

m = re.match("(?P<first_name>\w+) (?P<last_name>\w+)","sam lee")

> m.group("first_name")  # 'sam'

> m.group("last_name")   # 'lee'

re.sub('[abc]', 'o', 'caps rock')   # 'cops rook'

5. os、time

在Python中,通常有这几种方式来表示时间:

1)时间戳 :从1970年1月1日00:00:00开始按秒计算的偏移量,如:time(),clock(),mktime()

2)格式化的时间字符串,如:strftime ()

3)struct_time元组:如:gmtime()【UTC时区】,localtime()【当前时区】,strptime()

import os, time

time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X')

time.strftime("%Y-%m-%d %X", time.localtime())

time.localtime(1304575584.1361799)       #(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=14, tm_min=6, tm_sec=24, tm_wday=3, tm_yday=125, tm_isdst=0)

time.sleep(s)           #线程休眠s秒

#获取文件创建时间      例:1483882912.37   Sun Jan 08 21:41:52 2017

time.ctime(os.path.getctime(fileName))

os.path.exists(fileName)     #是否存在某一文件

os.chdir(dir)                 #修改当前目录

os.getcwd()                   #获取当前目录

os.listdir(dir)               #返回指定目录下的所有文件和目录名

os.remove(fileName)          #删除一个文件

os.makedirs(dir/fileName)    #生成多层递规目录

os.rmdir(dir)                 #删除单级目录

os.rename(oldName, newName)  #重命名文件

> os.sep        #当前平台下路径分隔符

> os.linesep    #给出当前平台使用的行终止符

> os.environ    #获取系统环境变量

os.path.abspath(path)         #显示该路径的绝对路径

os.path.dirname(path)         #返回该路径的父目录

os.path.isfile(path)          #如果path是一个文件,则返回True

os.path.isdir(path)           #如果path是一个目录,则返回True

os.path.splitext(fileName)   #获得(文件名,文件名后缀)

os.stat()      #获取文件或者目录信息

os.path.join(dir,fileName)   #连接目录与文件名或目录 结果为path/name

6. requests

import requests
 

session = requests.session()

url = 'https://api.github.com/some/endpoint'

params = {'some': 'data'}

headers = {'content-type': 'application/json'}

files = {'file': open('report.xls', 'rb')}

cookies = dict(cookies_are='working')

r = session.post(url, data = json.dumps(params), headers = headers, files = files, cookies = cookies, allow_redirects = False, timeout = 0.001)

# get、put、delete、options、head

> r.status_code   # requests.codes.ok

> r.url

> r.encoding

> r.text

> r.content

> r.headers       # r.headers['Content-Type']或 r.headers.get('content-type')

> r.history

7. beautifulsoup4

BeautifulSoup将HTML文档转换成一个树形结构,每个节点都是Python对象,所有对象可以归纳为4种:Tag、NavigableString、BeautifulSoup、Comment。

  • 当前结点:

.name:标签名

.attr:标签的属性集合(json)

.string:标签内容

.strings:标签对象包含的多个内容列表(list)

.stripped_strings:去除多余空白内容后的多个内容列表(list)

  • 直接/所有子节点:

.contents

.children     .descendants

  • (所有)父节点:

.parent        .parents

  • 兄弟节点:

.next_sibling

.previous_sibling

  • 前后节点【不分层次】:

.next_element         .next_elements

.previous_element    .previous_elements

搜索文档树

  • find_all、find
  • find_parents、find_parent
  • find_next_siblings、find_next_sibling
  • find_previous_siblings、find_previous_sibling
  • find_all_next、find_next
  • find_all_previous、find_previous
  • select

name参数:标签名、正则表达式、列表、True(匹配任何值)、方法

keyword参数:class、id、href等标签属性

text 参数:标签内容

limit参数:返回列表的大小

recursive 参数,是否仅包含直接子结点(True/False)

标签名不加任何修饰,类名前加点,id名前加 #

import re

from bs4 import BeautifulSoup

def has_class_but_no_id(tag):

return tag.has_attr('class') and not tag.has_attr('id')

soup = BeautifulSoup(html)

> soup.prettify()

> soup.find_all(has_class_but_no_id)

> soup.find(re.compile("^b"))

> soup.select('a[class="sister"]')

if type(soup.a.string)==bs4.element.Comment:

print(soup.a.string)         #遍历某一对象的非注释字符串

for str in soup.stripped_strings:

print(repr(str))

8. numpy

  • 常用属性:Itemsize(单个元素字节数)、size(元素个数)、shape、ndim(维数)、dtype、axis=0(列)/1(行)
  • 常用函数:max、min、sum、sin、floor(向下取整)、dot(矩阵相乘)、exp、.vstack(纵向合并)、hstack(横向合并)
  • 矩阵运算:transpose(转置)、trace(迹)、eig(特征值和特征向量)、inner(内积)、outer(外积)

import numpy as np

import numpy.linalg as nplg

a = np.array([[1,2],[3,4]] , dtype=np.int32)      #[[1 2][3 4]]

nplg.eig(a)       #矩阵A的特征向量和特征值

b = np.arange(6).reshape(2,3)   #[[0 1][2 3][4 5]]

c = np.linspace(1,3,9)           #[1. 1.25  1.5  1.75 2. 2.25 2.5  2.75 3.]

d = np.zeros((1,3))              # ones全1矩阵;eyes 单位矩阵;zeros 全0矩阵

e = d.repeat(2,axis=0)           #[[0 0 0][0 0 0]]

np.merage(a,b)    #合并数据

a.tofile("a.bin")

f = np.fromfile("a.bin", dtype= a.dtype)

f.shape = a.shape

np.save("a.npy", a)

g = np.load("a.npy")

9. scipy

10. sklearn

1)   Scikit-learn本身不支持深度学习和加强学习,也不支持GPU加速,不支持图模型和序列预测;

2)   Scikit-learn从来不做除机器学习领域之外的其他扩展;

3)   Scikit-learn从来不采用未经广泛验证的算法;

  1. 数据预处理

特征提取:将输入数据转换为具有零均值和单位权方差的新变量

归一化:将文本或图像数据转换为可用于机器学习的数字变量

from sklearn.preprocessing import *

# z-score标准化:减去均值,除以标准

X = StandardScaler().fit_transform(X)

# 最小-最大规范化:缩放至特定范围

X = MinMaxScaler().fit_transform(X)

X = MaxAbsScaler().fit_transform(X)

# 数据归一化/规范化

X = Normalizer(X, norm='l2').fit_transform(X)    # norm可取值l1,l2,max

# 数值特征二值化

X = Binarizer(threshold=1.1).fit_transform(X)    # threshold为阈值

# 类别数据编码,OneHot编码:OneHotEncoder

# 标签二值化:将类别特征转换为多维二元特征,并将每个特征扩展成用一维表示

label_binarize([1, 6], classes=[1, 2, 4, 6])     # 输出[1, 0, 0, 0],[0, 0, 0, 1]

# 类别编码

LabelEncoder().fit_transform(['A','A','b','c'])  # 输出[0, 0, 1, 2]

# 缺失值填补

imp = Imputer(missing_values='NaN', strategy='mean', axis=0)

imp.fit_transform([[1, 2], [np.nan, 3], [7, 6]]))      #[[1, 2], [4, 3], [7, 6]]

# 生成多项式特征  例:[a,b] -> [1,a,b,a^2,ab,b^2]

PolynomialFeatures(2).fit_transform(X)

# 增加伪特征

FunctionTransformer(np.log1p).fit_transform([[0, 1], [2, 3]])

  1. 分类算法

线性:朴素贝叶斯(NB)、K-最近邻(KNN)、逻辑回归(LR)

n  训练和预测的效率较高,但对特征的依赖程度也高

n  需在特征工程上尽量对特征进行选择、变换或者组合,使得特征具有线性可分性

非线性:随机森林(RF)、决策树(DT)、梯度提升(GBDT)、支持向量机-交叉验证(SVM-CV)、多层感知机(MLP)神经网络

n  可建模复杂的分类面,能更好的拟合数据。

# NB(Multinomial Naive Bayes) Classifier

from sklearn.naive_bayes import MultinomialNB

model = MultinomialNB(alpha=0.01)

# KNN Classifier

from sklearn.neighbors import KNeighborsClassifier

model = KNeighborsClassifier()

# LR(Logistic Regression) Classifier

from sklearn.linear_model import LogisticRegression

model = LogisticRegression(penalty='l2')

# RF(Random Forest) Classifier

from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier(n_estimators=8)

# DT(Decision Tree) Classifier

from sklearn import tree

model = tree.DecisionTreeClassifier()

# GBDT(Gradient Boosting Decision Tree) Classifier

from sklearn.ensemble import GradientBoostingClassifier

model = GradientBoostingClassifier(n_estimators=200)

# SVM Classifier

from sklearn.svm import SVC

model = SVC(kernel='rbf', probability=True)

# SVM Classifier using CV(Cross Validation)

from sklearn.grid_search import GridSearchCV

from sklearn.svm import SVC

model = SVC(kernel='rbf', probability=True)

param_grid = {'C': [1e-3, 1e-2, 1e-1, 1, 10, 100, 1000], 'gamma': [0.001, 0.0001]}

grid_search = GridSearchCV(model, param_grid, n_jobs = 1, verbose=1)

grid_search.fit(train_x, train_y)

best_parameters = grid_search.best_estimator_.get_params()

for para, val in best_parameters.items():

print para, val

model=SVC(kernel='rbf',C=best_parameters['C'],gamma=best_parameters['gamma'],probability=True)

# MLP Classifier

from sklearn.neural_network import MLPClassifier

clf=MLPClassifier(solver='lbfgs',alpha=1e-5,hidden_layer_sizes=(5,2),random_state=1)

#建立模型

model.fit(train_x, train_y)

#预测与评价

from sklearn import metrics

predict = model.predict(test_x)

precision = metrics.precision_score(test_y, predict)

recall = metrics.recall_score(test_y, predict)

accuracy = metrics.accuracy_score(test_y, predict)

  1. 回归分析

支持向量回归(SVR)

贝叶斯回归、内核岭回归(KR)、高斯回归

岭回归:通过增加惩罚函数来判断、消除特征间的共线性

Lasso回归(least absolute shrinkage and selection operator,最小绝对值收缩和选择算子)

弹性网络(Elastic Net):使用L1和L2先验作为正则化矩阵的线性回归模型

最小角回归(LARS,least angle regression),可用作参数选择,得到一个相关系数的稀疏向量

# 产生200个样本,500个特征(维)的回归样本空间

from sklearn.datasets import make_regression

reg_data, reg_target = make_regression(n_samples=200, n_features=500, n_informative=5, noise=5)

# 线性回归、贝叶斯回归、Lasso回归以及特征提取、岭回归、LARS回归

from sklearn import linear_model

regr_model = linear_model.LinearRegression()

bys_model = linear_model.BayesianRidge(compute_score=True)

lasso_model = linear_model.Lasso()

r_model = linear_model.Ridge(alpha=.5)

lars_model = linear_model.Lars(n_nonzero_coefs=10)

# 交叉验证

lasso_cv = linear_model.LassoCV(alphas=None, copy_X=True, cv=None, eps=0.001,

fit_intercept=True, max_iter=1000, n_alphas=100, n_jobs=1,

normalize=False, positive=False, precompute='auto',

random_state=None, selection='cyclic', tol=0.0001,verbose=False)

lasso_cv.fit(reg_data, reg_target)

> lasso_cv.alpha_        # 正则化项L1的系数

> lasso_cv.intercept_    # 截距

new_reg_data = reg_data[:,lasso_cv.coef_!=0]  #相关系数!=0的特征,被提取得到

# 高斯回归

from sklearn import gaussian_process

gp_model = gaussian_process.GaussianProcess(theta0 = 1e-2, thetaL = 1e-4, thetaU= 1e-1)

# SVR回归、KR回归

from sklearn.svm import SVR

from sklearn.grid_search import GridSearchCV

from sklearn.kernel_ridge import KernelRidge

svr_model = GridSearchCV(SVR(kernel = 'rbf', gamma = 0.1), cv = 5,

param_grid = {"C": [1e0,1e1,1e2,1e3], "gamma": np.logspace(-2, 2, 5)})

kr_model = GridSearchCV(KernelRidge(kernel = 'rbf', gamma = 0.1), cv = 5,

param_grid = {"alpha": [1e0,0.1,1e-2,1e-3], "gamma": np.logspace(-2,2,5)})

#训练模型

model.fit (X_train, y_train)

# 打印相关系数

print('Coefficients: \n', model.coef_)

print("Residual sum of squares: %.2f" % np.mean((model.predict(X_test) - y_test) ** 2))

print('Variance score: %.2f' % model.score(X_test, y_test))

  1. 聚类算法(无监督)

K-均值(K-means)聚类,谱聚类,均值偏移,分层聚类,DBSCAN聚类

import numpy as np

from sklearn import datasets

# 产生500个样本,6个特征(维),5个簇的聚类样本空间

X, Y = datasets.make_blobs(n_samples=500, n_features=6, centers=5, cluster_std=[0.4, 0.3, 0.4, 0.3, 0.4], random_state=11)

# K-means Cluster

from sklearn.cluster import KMeans

clf_model = KMeans(n_clusters=3, max_iter=300, n_init=10)

# 谱聚类

from sklearn.cluster import SpectralClustering

clf_model = SpectralClustering()  #或SpectralClustering(n_clusters=k, gamma=gamma)

# DBSCAN Cluster

from sklearn.cluster import DBSCAN

clf_model = DBSCAN(eps = 0.3, min_samples = 10)

#建立模型

clf_model.fit(X)

y_pred = clf_model.fit_predict(X)

#预测与评价

from sklearn import metrics

y_pred = clf_model.labels_

n_clusters_ = len(set(y_pred)) - (1 if -1 in y_pred else 0)

print("Estimated number of clusters: %d" % n_clusters_)

print("Homogeneity: %0.3f" % metrics.homogeneity_score(Y, y_pred))

print("Completeness: %0.3f" % metrics.completeness_score(Y, y_pred))

print("V-measure: %0.3f" % metrics.v_measure_score(Y, y_pred))

print("Adjusted Rand Index: %0.3f" % metrics.adjusted_rand_score(Y, y_pred))

print("Adjusted Mutual Information: %0.3f" % metrics.adjusted_mutual_info_score(Y, y_pred))

print("Silhouette Coefficient: %0.3f" % metrics.silhouette_score(X, y_pred))

print("Calinski-Harabasz Score", metrics.calinski_harabaz_score(X, y_pred))

  1. 数据降维

目的:减少要考虑的随机变量的个数

应用场景:可视化处理、效率提升

主成分分析(PCA)、非负矩阵分解(NMF)、文档生成主题模型(LDA)、特征选择

# PCA (Principal Components Analysis)

from sklearn import decomposition

pca = decomposition.PCA()

pca.fit(X)   # 直接对数据进行降维

print(pca.explained_variance_)

pca.n_components = 2

X_reduced = pca.fit_transform(X)

# NMF(Nonnegtive Matrix Factorization)

from sklearn.feature_extraction.text import TfidfVectorizer

from sklearn.decomposition import NMF

tfidf_vector = TfidfVectorizer(max_df=0.95, min_df=2, max_features=n_features,

stop_words='english')

tfidf = tfidf_vector.fit_transform(data_samples)

nmf = NMF(n_components=n_topics, random_state=1, alpha=.1, l1_ratio=.5).fit(tfidf)

# LDA(Latent Dirichlet Allocation)

from sklearn.feature_extraction.text import CountVectorizer

from sklearn.decomposition import LatentDirichletAllocation

tf_vector = CountVectorizer(max_df=0.95, min_df=2, max_features=n_features,

stop_words='english')

tf = tf_vector.fit_transform(data_samples)

lda = LatentDirichletAllocation(n_topics=n_topics, max_iter=5, learning_method='online',

learning_offset=50, random_state=0)

.fit(tf)

# 打印模型结果

feature_names = vector.get_feature_names()

for topic_idx, topic in enumerate(model.components_):

print("Topic #%d:" % topic_idx)

print(" ".join([feature_names[i] for i in topic.argsort()[:-n_top_words - 1:-1]]))

  1. 模型选择

对于给定参数和模型的比较、验证和选择

目的:通过参数调整来提升精度

格点搜索,交叉验证,各种针对预测误差评估的度量函数

#交叉验证

from sklearn import metrics

from sklearn.svm import SVC

from sklearn.model_selection import cross_val_score

clf = SVC(kernel='linear', C=1)

scores = cross_val_score(clf, iris.data, iris.target, cv=5, scoring='f1_macro')

print("Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))

# 模型的保存与载入

import pickle

from sklearn.externals import joblib

joblib.dump(clf , 'c:/km.pkl')

clf = joblib.load('c:/km.pkl')

with open('save/clf.pickle', 'wb') as f: pickle.dump(clf, f)

with open('save/clf.pickle', 'rb') as f: clf = pickle.load(f)

print(clf.predict(X[0:1]))      #测试读取后的Model

11. matplotlib

from matplotlib.matlab import *

from pylab import *

plot(x, y1, 'r*', linewidth=2, label='f(x)=sin(x)')     #普通曲线图

plot(x, y2, 'b-', linewidth=2, label='f(x)=2^x')

xlabel('x');    ylabel('f(x)');    title('Simple plot')

legend(loc='upper left')            # 添加图例

grid(True)                           # 显示网格

savefig("sin.png" ,dpi=72)          # 保存图表(dpi为分辨率)

show()                               # 显示图表,注:每次显示后刷新画板

text(2,4, r'$ \alpha_i \beta_j \pi \lambda \omega $' , size=15)    #

text(4,4, r'$ \sin(0) = cost (\frac {\pi} {2}) $' , size=15)       #

text(2,2 , r'$ lim_{x \rightarrow y} \frac{1} {x^3} $', size=15)   #

text(4,2 , r'$ \sqrt[4] {x} = \sqrt {y} $', size=15)                #

12. jieba            https://github.com/fxsjy/jieba

import jieba

import jieba.posseg as pseg

sentence = "我来到北京清华大学"

#分词

seg_list = jieba.cut(sentence, cut_all=True) # 全模式

seg_list = jieba.cut(sentence, cut_all=False) # 精确模式

seg_list = jieba.cut(sentence)  # 默认是精确模式

seg_list = jieba.cut_for_search(sentence)  # 搜索引擎模式

#加载词典,格式:词语 [词频] [词性]

jieba.load_userdict(file_name) # file_name 为文件类对象或自定义词典的路径

#手动调整使某个词(不)分开

jieba.suggest_freq(('中', '将'), True)

jieba.suggest_freq('台中', True)

#关键词提取

jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n','v'))

jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n','v'))

#词性标注

words = pseg.cut(sentence)

for word, flag in words:

print('%s %s' % (word, flag))

13. pandas

import numpy as np

import pandas as pd

from pandas import Sereis, DataFrame

data = DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz'))

a   b   c   d

w   0   1   2   3

x   4   5   6   7

y   8   9  10  11

z  12  13  14  15

data[1:4,0:3]         #第2到4行,第1到3列

data[['x':'z'],[0:2]]

data.iat[1:4,[0:2]]

data.ix[1:4,[‘a’,’b’,’c’]]

data.loc[['x',’y’,’z’],[‘a’:’c’]]

data.irow(0)    #第1行           data.iloc[-1:]  #最后1行

data.icol(0)    #第1列           data.iloc[:-1]  #最后1列

data.ix[data.a>5,3]   # ‘a’列>5的值所在行【’y’,’z’】,第4列的数据

data.head()  #返回data的前几行数据,默认为前五行,需要前十行则data.head(10)

data.tail()  #返回data的后几行数据,默认为后五行,需要后十行则data.tail(10)

14. nltk

l  nps_chat  # 即时消息聊天会话语料库

l  brown    # 布朗语料库

[1]      是第一个百万词级的英语电子语料库

[2]      由布朗大学于 1961年创建,包含500个不同来源的文本

[3]      按照文体分类:['adventure', 'belles_lettres', 'editorial', 'fiction', 'government', 'hobbies', 'humor', 'learned', 'lore', 'mystery', 'news', 'religion', 'reviews', 'romance', 'science_fiction']

l  reuters    # 路透社语料库

[1]      包含 10,788 个新闻文档,共计 130 万字

[2]      这些文档分成 90 个主题,按照“训练”和“测试”分为两组

[3]      新闻报道往往涉及多个主题,类别往往互相重叠

[4]      可以查找由一个或多个文档涵盖的主题,也可以查找包含在一个或多个类别中的文档

l  inaugural    # 就职演说语料库

[1]       55个文本,每个文本都是一个总统的演说,具有时间维度

l  udhr        # 标注文本语料库 “世界人权宣言”

[1]      包含多国语言['Chickasaw', 'English','German_Deutsch','Greenlandic_Inuktikut','Hungarian_Magyar', 'Ibibio_Efik']

15. PIL

import zbar

from PIL import Image

#识别二维码

scanner = zbar.ImageScanner()       #创建图片扫描对象

scanner.parse_config('enable')      #设置对象属性

img = Image.open(filename).convert('L')   #打开一张二维码图片, #默认mode="r"

qrCode = zbar.Image(img.width, img.height,'Y800', img.tobytes())  #转换图片为字节信息并扫描

scanner.scan(qrCode)

data += s.data for s in qrCode

del(img)          # 删除图片对象

print(data)       # 输出解码结果

#在图片上添加文字,增加噪音点

draw = ImageDraw.Draw(img)

font = ImageFont.truetype(fontfile, min(img.size)/30)

draw.text((0,img.height - fontsize), data, font=font, fill=(255,0,0))

draw.point((random.randint(0,width), random.randint(0,height)), fill=(0,0,255))

#按比例缩放后,模糊处理并保存

rate = max( img.width/p_width, img.height/p_height )

if rate!=0:

img.thumbnail((img.size[0]/rate , img.size[1]/rate)) #注:此处有两个括号

img = img.filter(ImageFilter.BLUR)

img.show(); img.save(filename, 'jpeg')   # 或者是'png'

img.close()

16. goose

17. xgboost

l  优势

1、  正则化,减少过拟合

2、  并行处理,也支持Hadoop实现

3、  高度的灵活性,允许自定义优化目标和评价标准

4、  缺失值处理

5、  剪枝

6、  内置交叉验证,获得最优boosting迭代次数

7、  可在已有模型上继续训练

l  参数

1、  通用参数:宏观函数控制

u  booster:每次迭代的模型,gbtree(默认):基于树的模型,gbliner:线性模型

u  silent:0-默认;1-静默模式,不输出任何信息

u  nthread:默认值为最大可能的线程数

2、  Booster参数:控制每一步的booster(tree/regression)

u  eta [默认0.3]:学习速率,通过减少每一步的权重,可提高模型的鲁棒性。 典型值为0.01-0.2。

u  min_child_weight [默认1]:最小样本权重的和

u  max_depth [默认6]:树的最大深度,典型值:3-10

u  max_leaf_nodes:最大的节点或叶子的数量

u  gamma [默认0]:节点分裂所需的最小损失函数下降值

u  max_delta_step [默认0]:每棵树权重改变的最大步长

u  subsample [默认1]:每棵树随机采样的比例,典型值:0.5-1

u  colsample_bytree [默认1]:每棵随机采样的列数的占比(每一列是一个特征)。 典型值:0.5-1

u  colsample_bylevel [默认1]:树的每一级的每一次分裂,对列数的采样的占比

u  lambda [默认1]:权重的L2正则化项,和Ridge regression类似

u  alpha [默认1]:权重的L1正则化项,和Lasso regression类似,可以应用在很高维度的情况下,使得算法的速度更快

u  scale_pos_weight [默认1]:在样本不平衡时,把这个参数设为一个正值,可以使算法更快收敛

3、  学习目标参数:控制训练目标的表现

u  objective [默认reg:linear]:需要被最小化的损失函数。

l  binary:logistic 二分类的逻辑回归,返回预测的概率(不是类别)

l  multi:softmax 使用softmax多分类器,返回预测的类别(不是概率),还需设一个参数:num_class(类别数目)

l  multi:softprob 和multi:softmax参数一样,但是返回的是每个数据属于各个类别的概率

u  eval_metric [默认值取决于objective参数的取值]:对于有效数据的度量方法。

l  对于回归问题,默认值是rmse,均方根误差

l  对于分类问题,默认值是error,二分类错误率(阈值为0.5)

l  mae 平均绝对误差

l  logloss 负对数似然函数值

l  merror 多分类错误率

l  mlogloss 多分类

l  logloss损失函数

l  auc 曲线下面积

u  seed [默认0]:随机数的种子,设置它可复现随机数据的结果,也可用于调整参数

import xgboost as xgb

#加载XGBoost的二进制的缓存文件

dtrain = xgb.DMatrix('train.svm.txt')

deval = xgb.DMatrix('test.svm.buffer')

#加载Numpy的二维数组,并处理 DMatrix中的缺失值,给样本设置权重

data = np.random.rand(5,10)              # 5个训练样本,10个特征

label = np.random.randint(2, size=5)

w = np.random.rand(5,1)

dtrain = xgb.DMatrix( data, label=label, missing = -999.0, weight=w)

#将scipy.sparse格式的数据转化为 DMatrix格式

csr = scipy.sparse.csr_matrix((data, (row,col)))

dtrain = xgb.DMatrix(csr)

#将DMatrix格式的数据保存成XGBoost的二进制格式,在下次加载时可以提高加载速度

dtrain.save_binary("train.buffer")

#参数设置

params = {

'booster': 'gbtree',  # gbtree(默认):基于树的模型,gbliner:线性模型

'objective': 'binary:logistic',

'eval_metric':'logloss',

'scale_pos_weight':1,    #样本不平衡时,把这个参数设定为正值,可使算法更快收敛

'max_depth':6,           #通常取[3,10], 树的最大深度

'min_child_weight':1,    #默认为1,最小样本权重的和

'gamma':0.15,        #通常取[0.1,0.2],节点分裂所需的最小损失函数下降值,默认为0

'subsample':0.9,     #通常取[0.5,1],每棵树随机采样的比例

'colsample_bytree':0.9, #通常取[0.5,0.9],随机采样的列数的占比(每一列是一个特征),默认为1

'lambda':0.1,        #权重的L2正则化项

'alpha':0.2,         #权重的L1正则化项

'eta':0.15             #学习速率,默认为0.3,通常取[0.01,0.2]

}

plst = param.items()

#调整参数

res = xgb.cv(params, xgTrain)

#定义验证数据集,验证算法的性能

evallist = [(deval,'eval'), (dtrain,'train')]

#训练模型

num_round = 10

bst = xgb.train( plst, dtrain, num_round, evallist, evals=evals, early_stopping_rounds=5)

#保存模型

bst.save_model('model.bin')

bst.dump_model('dump.raw.txt')

bst.dump_model('dump.raw.txt','featmap.txt')

#加载模型

bst = xgb.Booster({'nthread':4})

model = bst.load_model("model.bin")

#预测结果

data = np.random.rand(7,10)           # 7个测试样本,10个特征

dtest = xgb.DMatrix(data, missing = -999.0 )

ypred = bst.predict(model)

ypred = bst.predict(model, ntree_limit=bst.best_iteration)

python库使用整理的更多相关文章

  1. 花了三个月终于把所有的 Python 库全部整理了!可以说很全面了

    库名称简介 Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主要用于在终端或浏览器端构建格式 ...

  2. [转载]花了半个月,终于把Python库全部整理出来了,非常全面

    库名称简介 Chardet 字符编码探测器,可以自动检测文本.网页.xml的编码. colorama 主要用来给文本添加各种颜色,并且非常简单易用. Prettytable 主要用于在终端或浏览器端构 ...

  3. 这几天加班熬夜把所有Python库整理了一遍,非常全面!

    库名称简介 Chardet 字符编码探测器,可以自动检测文本.网页.xml的编码.colorama 主要用来给文本添加各种颜色,并且非常简单易用.Prettytable 主要用于在终端或浏览器端构建格 ...

  4. Python库整理

    库名称简介 Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主要用于在终端或浏览器端构建格式 ...

  5. Python 库整理【收藏】

    库名称简介 Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主要用于在终端或浏览器端构建格式 ...

  6. 常用Python库整理

    记录工作和学习中遇到和使用过的Python库. Target 四个Level 整理 Collect 学习 Learn 练习 Practice 掌握 Master 1. Python原生和功能增强 1. ...

  7. Python 库大全

    作者:Lingfeng Ai链接:http://www.zhihu.com/question/24590883/answer/92420471来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非 ...

  8. Python库

    --Python库之Pandas库-------- 自主选择学习了Python中的Pandas库,以下是本人对Pandas库的认识: Pandas库是Python最受欢迎的库之一,主要用于数据的操作. ...

  9. 哪些 Python 库让你相见恨晚?【转】

    原文链接:https://www.zhihu.com/question/24590883/answer/92420471 原文链接:Python 资源大全 ---------------- 这又是一个 ...

随机推荐

  1. 在ubuntu 64位的机器上执行arm-linux-gcc提示 no such file or directory【转】

    本文转载自:http://blog.csdn.net/sno_guo/article/details/17059381 解压好了arm-linuxg-gcc 放到了$PATH路径下, 无论怎么执行都提 ...

  2. HDU2586 How far away? —— 倍增LCA

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 How far away ? Time Limit: 2000/1000 MS (Java/Ot ...

  3. 6个基本screen命令

    screen -S  <name>    直接建立并进入<name>窗口 control+a    d    暂时退出窗口 (在会话内) screen -r <name& ...

  4. servlet与jsp理论知识讲解

    servlet是java服务器端编程,是运行在服务器上的.不同于以前的java小程序.                                                         ...

  5. jsp报An error has occurred. See error log for more details. Argument not valid错误

    An error has occurred. See error log for more details. Argument not valid 翻译过来是:一个错误已经发生.看到更多的细节错误日志 ...

  6. Linux 修改所属组与所属人

    1.chown work /test/* 修改test文件夹下所有文件的所属人(owner)为work 2.chgrp work /test/* 修改test文件夹下所有文件的所属组(group)为w ...

  7. CodeForces990G:GCD Counting(树分治+GCD)

    You are given a tree consisting of nn vertices. A number is written on each vertex; the number on ve ...

  8. BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数

    BZOJ_4026_dC Loves Number Theory _主席树+欧拉函数 Description  dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯 竭 ...

  9. HDU2159(完全背包)

    FATE Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Description ...

  10. android jni下c文件怎么输出logcat

    #include <android/log.h> #define LOG_TAG "clog"#define LOGD(...) __android_log_print ...