在机器学习中,数据清洗与转换包括哪些内容?
对数据进行初步的预处理,需要将其转换为一种适合机器学习模型的表示形式对许多模型类型来说,这种表示就是包含数值数据的向量或者矩阵:
1)将类别数据编码成为对应的数值表示(一般使用1-of-k方法)-dumy
2)从文本数据中提取有用的数据(一般使用词袋法或者TF-IDF)
3)处理图像或者音频数据(像素、声波、音频、振幅等<傅里叶变换>)
4)数值数据转换为类别数据以减少变量的值,比如年龄分段
5)对数值数据进行转换,比如对数转换
6)对特征进行正则化、标准化,以保证同一模型的不同输入变量的值域相同
7)对现有变量进行组合或转换以生成新特征,比如平均数(做虚拟变量)不断尝试
文本数据抽取有哪些方法?
词袋法︰将文本当作一个无序的数据集合,文本特征可以采用文本中的词条T进行体现,那么文本中出现的所有词条及其出现的次数就可以体现文档的特征
TF-IDF:词条的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降;也就是说词条在文本中出现的次数越多,表示该词条对该文本的重要性越高,词条在所有文本中出现的次数越少,说明这个词条对文本的重要性越高。TF(词频)指某个词条在文
本中出现的次数,一般会将其进行归一化处理(该词条数量/该文档中所有词条数量);IDF(逆向文件频率)指一个词条重要性的度量,一般计算方式为总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。TF-IDF实际上是∶TF *IDF
有一种类数据[1,3,2,1,3,3,1],通过python实现哑编码代码?
def yumcode(a): y=[] for x in (1,2,3): if x==a: y.append(1) else: y.append(0) return y yum=map(lambda x:yumcode(x) ,[1,3,2,1,3,3,1]) for e in yum: print(e)
在机器学习中,请写出模型效果判断常用算法。
MSE∶误差平方和,越趋近于0表示模型越拟合训练数据。
RMSE: MSE的平方根,作用同MSE
R2∶取值范围(负无穷,1],值越大表示模型越拟合训练数据;最优解是1;当模型预测为随机值的时候,有可能为负﹔若预测值恒为样本期望,R2为0
TSS∶总平方和TSS(Total Sum of Squares),表示样本之间的差异情况,是伪方差的m倍
RSS:残差平方和RSS ( Residual Sum of Squares ),表示预测值和样本值之间的差异情况,是MSE的m倍
请同学们使用逻辑回归根据鸢尾花(iris.data)分类建模
#加载数据 datas=pd.read_csv("datas/iris.data",header=None)#加载iris.data数据 #数据处理 datas=datas.replace("?",np.NaN)#把?号用NaN替换 datas=datas.dropna(how="any",axis=1)#删除NaN行 #提取X和Y X=datas.iloc[:,0:-1]#取0到最后一列前一列 #对种类英文编码 Y=pd.Categorical(datas[4]).codes#对最后一列做编码 #对数据进行拆分 #逻辑回归是用来判断 y属于哪一个种类 1 0 train_x,test_x,train_y,test_y=train_test_split(X,Y,test_size=0.2,random_state=1) #创建模型和训练模型 ss=StandardScaler() train_x=ss.fit_transform(train_x)#把trainx数据标准化 test_x=ss.transform(test_x)#把testx数据标准化 logistic=LogisticRegressionCV(random_state=2,multi_class="ovr",cv=3) logistic.fit(train_x,train_y) #能够识别三种花模型 求theta #评估 proba=logistic.predict_proba(test_x)#每条记录每个种类的概率 30行 3列 ymy=label_binarize(test_y,classes=(0,1,2))#转换成哑编码 30行 3列 fpr,tpr,threshold=metrics.roc_curve(ymy.ravel(),proba.ravel())#ravel拉平,变成一维 auc=metrics.auc(fpr,tpr)#根据fpr tpr计算面积 print("auc",auc) knn=KNeighborsClassifier(n_neighbors=5,algorithm="kd_tree") knn.fit(train_x,train_y)#构建kd树 test_y_hat=knn.predict(test_x) proba_knn=knn.predict_proba(test_x) fpr1,tpr1,threshold1=metrics.roc_curve(ymy.ravel(),proba_knn.ravel()) auc1=metrics.auc(fpr1,tpr1) print(auc1) plt.figure() #画逻辑回归算法ROC曲线 plt.plot(fpr,tpr,color='red',label='回归ROC auc:'+str(auc)) plt.plot(fpr1,tpr1,color='green',label='knnROC auc:'+str(auc1)) plt.legend() plt.show()
利用梯度下降算法完成y=
求解x并画出轨迹图
import numpy as np import matplotlib.pyplot as plt import sys X=[] Y=[] def l(x):#相当损失函数 return x*x#x^2 def h(x):#梯度 return 2*x theta=2#theta初始值2 # C:\Users\t430\AppData\Local\VZip y=l(theta)#调用损失函数 f_change=2#损失变化 f_up=l(theta)#上次损失 Y.append(y) X.append(theta) b=0.8#a太大不收敛 i=0 print(f_change >1e-10) while f_change >1e-10: theta=theta-b*h(theta)#更新theta tmp=l(theta)#theta的平方 f_change=abs(f_up-tmp) f_up=tmp X.append(theta) Y.append(tmp) i=i+1 print(theta) plt.figure() plt.plot(X,Y,c="red") print(X) X2=np.arange(-2,2,0.1) Y2=X2**2 plt.plot(X2,Y2,c="green") plt.show()