一、数据归一化

数据归一化(Normalize)数据归一化的意义在于,如果每个特征的差别非常大,那么机器学习在训练过程中,会花费非常大的时间。所以需要对特征进行数据归一化,就是把所有特征向量的范围在一定内,比如都在[0,1]之间。
最大值/最小值归一化
x=x-min/(max-min)
这样可以把每个特征的缩放到[0,1]范围内
df[col].min()就是对这一列求最小值
df[col].max()就是对这一列求最大值

对每一行的特征进行归一化,在pandas里面的代码如下,即对所有的特征列,每一列,进行最大最小值归一化。

"""feature是df定义的特征列"""
df=pd.read_csv("特征文件.csv")
feature_col = ["特征1","特征2"]
for col in feature_col:
	df[col]=df[col]-df[col].min()/(df[col].max()-df[col].min())

二、划分测试集/训练集

对于输入的数据集,需要将其分隔为测试集和验证集。sklearn库里面有一个model_selection,里面的train_test_split方法可以对数据集进行划分。设置test_size=0.3,代表划分数据集70%为训练集,30%为测试集。

from sklearn.model_selection import train_test_split
  X_train,X_test, y_train, y_test =model_selection.train_test_split(df[feature_col],df["tag"],test_size=0.3, random_state=0)
  #第一个参数代表特征列
  #第二个参数输入对于的类别标记
  #第三个参数test_size代表测试集大小
  #第四个参数代表随机选择,这里表示不随机

三、使用经典算法

(1)SVM–支持向量机
支持向量机是机器学习中的经典算法,适用于多特征维度,可以很好的将维度,其原理是在n维特征空间中找到一个n-1维的平面,将这些点进行分类。
sklearn里面集成了svm算法,这里可以直接使用,代码如下:

from sklearn import svm
clf = svm.SVC()  
clf.fit(X_train, y_train) #使用前面生成的训练集去训练模型
y_pred = clf.predict(X_test) #进行预测

训练好的模型进行预测使用svm.predict()方法即可

(2)LinearRegression–线性回归

from sklearn import linear_model
linreg = LinearRegression()
linreg.fit(X_train, y_train)#使用前面生成的训练集去训练模型
y_pred = linreg.predict(X_test)#进行预测

(3)最邻近算法NearestCentroid

"""""---------最邻近算法----------------"""
    from sklearn.neighbors import NearestCentroid
    nc = NearestCentroid()
    nc.fit(X_train,y_train)
    y_pred = nc.predict(X_test)

四、算法评估

(1)准确率(Accuracy Score)
准确率=所有正确分类样例/样本总数
(2)精确率 (Precision Score)
精确率= 真正例/(真正例+假正例
(3)召回率(Recall Score)
召回率=真正例/(真正例+假负例)
使用metrics进行评估,metrics中有accuracy_score方法,可以评估模型的准确性。第一个参数是测试集结果,第二个参数是预测的结果。此处需要注意,预测的结果需要进行取整,因为有时候预测的结果可能是1.0这样的。

from sklearn import metrics
print "精确度"+str(metrics.precision_score(y_test,y_pred.round()))    
print "准确率"+str(metrics.accuracy_score(y_test,y_pred.round()))
print "召回率"+str(metrics.recall_score(y_test,y_pred.round()))

五、评估相关曲线介绍

1.ROC曲线
ROC曲线下面积越接近1,模型效果越好,下面是sklearn画ROC曲线的代码

from sklearn.metrics import roc_curve
from sklearn.metrics import roc_auc_score
from matplotlib import pyplot as plt
fpr, tpr, thresholds = roc_curve(y_test, y_pred, pos_label=1)
AUC_ROC = roc_auc_score(y_test, y_pred)
roc_curve =plt.figure()
plt.plot(fpr,tpr,'-',label='Area Under the Curve (AUC = %0.4f)' % AUC_ROC)
plt.title('ROC curve')
plt.xlabel("FPR (False Positive Rate)")
plt.ylabel("TPR (True Positive Rate)")
plt.legend(loc="lower right")

六、模型的保存

使用dump将训练好的模型保存下来,下次就可以继续用啦

from sklearn.externals import joblib
joblib.dump(clf, 'e:\\MachineLearning\\SVC.model')
svc = joblib.load(Path)#就可以加载了