您的位置:首页 > 编程语言 > Python开发

Python机器学习----第1部分 环境安装及算法介绍

2018-01-14 18:46 387 查看
1、环境搭建
  下载Python3.6版本后,双击安装程序,下一步,下一步完成安装。安装路径选择的简单些,直接C盘或D盘下即可。安装完毕后,用pip下载virtualenv后,建立虚拟环境“ScikitLearn”。在虚拟环境目录下,用pip下载NumPy、SciPy、scikit-learn、matplotlib、pandas。
2、样本数据的准备
  我们把数据存放在cvs文件中,使用pandas读取数据,并抽取相应的列出来,做数据转换后,进行训练。
import Pandas as pd
import numpy as np
df = pd.read_cvs("文件路径",hearder=None)
y=df.iloc[0:100, 4].values  #抽取0--100行,第4列数据
y=np.where(y=='Iris-setosa',-1,1) #向量推导
X=df.iloc[0:100, [0,2]].values #抽取0--100行,第0列,第2列数据
#这里已将样本数据及分类结果抽取出来了,下面需要将样本数据分为训练数据和测试数据
from sklearn.cross_validation import train_test_split
X_train,X_test,Y_train,Y_test = train_test_split(X, y, test_size=0.3,random_state=0)
#将样本数据和分类结果拆分为训练数据(70%)和测试数据(30%)
#为了优化性能,很多机器学习算法要求对数据做特征缩放:
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)  在标准化过程中,使用训练数据计算特征缩放参数,而后使用同样的参数处理训练数据和测试数据。  注意:这里只分了两个类别,scikit-learn算法基本上都支持多类别分类。

3、scikit-learn的感知器算法
  from sklearn.linear_model import Perceptron
ppn = Perceptron(n_iter=40,eta=0.1,random_state=0)
ppn.fit(X_train_std,Y_train)
Y_pred = ppn.Predict(X_test_std)
(Y_test != Y_pred).sum()#得到错误预测的样本数
from sklearn.metrics import accuracy_score
accuracy_score(Y_test,Y_pred)#得到分类准确性
  感知器算法是机器学习的入门算法,对线性可分的样本有效,但对于非线性可分的样本,则不会收敛,实际项目中很少应用这个算法,而是使用逻辑斯蒂回归和SVM(支持向量机)等算法。  代码中训练数据为X_train_std,测试数据为X_test_std,后缀std表示样本数据已经被标准化,后续不在做说明。
  上面代码中计算错误预测样本数和分类准确性的代码,可用于其他评估算法性能。对于二维的样本,我们可以使用matplotlib绘制图例查看样本是否为线性可分,并查看分类结果。但对于高维样本,则需降维后在绘制(后续继续深入研究)。
4、scikit-learn的逻辑斯蒂回归算法
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(C=1000.0,random_state=0)
lr.fit(X_train_std, Y_train) #训练模型
Y_pred = lr.predict(X_test_std) #测试准确性
lr.predict_proba(X_test_std[0,:]) #得到一个样本数据在各个分类的概率的向量   如果模型在训练数据集上表现良好,在测试数据集上不佳,则存在过拟合,即高方差。原因是样本中特征(列数)太多,过于复杂。解决方案是进行正则化,过滤噪声。在LogisticsRegression和SVC(支持向量机)类的构造函数中有一个C参数,即为正则化强度参数,C越小,正则化强度约大。如果算法过拟合,可以减小参数C,加强正则化后再次训练和测试。5、scikit-learn的支持向量机算法
from sklearn.SVM import SVC
svm = SVC(Kernel='linear', C=1.0,random_state=0)
svm.fit(X_train_std, Y_train)
Y_pred = svm.predict(X_test_std)SVC类的构造函数中也有C参数,即为正则化强度(成反比),另一个参数Kernel指定核函数,值可为'linear'(处理线性可分数据集),或'rbf'(处理非线性可分数据集)from sklearn.SVM import SVC
svm = SVC(Kernel='rbf', C=10.0, random_state=0, gamma=0.10)
svm.fit(X_train_std, Y_train)
Y_pred = svm.predict(X_test_std)参数gamma决定了支持向量机分类的边界宽松程度(成反比)

6、scikit-learn中超大数据量的情况的分类算法from sklearn.linear_model import SGDClassifier
ppn = SGDClassifier(loss='Perceptron') # 感知器算法
lr = SGDClassifier(loss='log') #逻辑斯蒂回归算法
svm = SGDClassifier(loss='hinge') #支持向量机算法  如果数据量太大,无法一次加载到内存,则使用SGDClassifier算法进行训练。而且还提供了partial_fit方法进行在线学习(样本分批训练)。7、scikit-learn中的决策树算法
from sklearn.tree import DecisionTreeClassifier
tree = DecisionTreeClassifier(criterion='entropy',max_depth=3,random_state=0)
tree.fit(X_train,Y_train)
Y_pred = tree.predict(X_test)决策树和下面说的K近邻算法如过拟合,正则化是无效的(因此构造函数没有提供参数C),需进行特征选择或降维处理。
8、scikit-learn中的随机森林算法
from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(criterion='entropy',
n_estimators=10, #决策树数量
random_state=0,
n_jobs=2) #使用几个CPU内核进行计算
forest.fit(X_train,Y_train)
Y_pred = forest.predict(X_test)随机森林由多个决策树组成,准确性比单个决策树更好,易于扩展,具有更好的泛化误差,不易产生过拟合现象。9、scikit-learn中的K-近邻算法
from sklearn.neighbors import KNeighborsClassifier
knn = KNerghborsClassifier(n_neighbers=5,
p=2, #计算样本点间距离的算法 1为曼哈顿距离,2为欧几里得距离
metric='minkowski')
knn.fit(X_train,Y_train) #因为要计算距离,所以先进行了标准化,防止某个特征值范围过大,计算出来的距离也过大,无法收敛
Y_pred = knn.predict(X_test)上面介绍了scikit-learn提供的各种算法,对应类的构造函数参数具体意义与其算法理论相关,不做具体介绍。后续继续讲解如果选择参数的值,提高分类准确性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: