机器学习经常用到的函数(特征工程,参数选择,评估值等)
- 我草泥马!!!!!loc取值的时候行索引从0开始,代表第一行, iloc取值行索引也从0开始,还有
- 一定要记得记得记得记得每次清洗完数据之后用data.rest_index(inplate=True)重置索引
一:生成数据
1. make_blobs(from sklearn.datasets.samples_generator import make_blobs):
用于生成训练样本,https://www.jianshu.com/p/069d8841bd8e
2.make_circles(from sklearn.datasets.samples_generator import make_circles):
生成圆形样本,其中factor参数为内圆与外圆的半径之比。
2. contour:画等高线(在matplotlib中)
3. meshgrid(在numpy):生成坐标网格。
4. 用以下的方法可以画3维图形
from mpl_toolkits import mplot3d r = np.exp(-(X**2).sum(1)) def plot3d(X, y): ax = plt.subplot(projection='3d') ax.scatter3D(X[:, 0], X[:, 1], r, c=y) ax.set_xlabel("x") ax.set_ylabel("y") ax.set_zlabel("z") plot3d(X, y)
5. format格式化字符串:https://www.runoob.com/python/att-string-format.html
6.使用matplotlib.cm.rainbow(np.linespace(0, 1, len))可以生成数量为len的颜色用于画图来区分不同类
二:好玩的数据集
1. 一些有名字的人脸数据:from sklearn.datasets import fetch_lfw_people
faces = fetch.lfw.people(min_faces_per_person=60) 选出用60个脸图的人。
faces有target属性,target[i]是第i张脸的名字的索引
target_name属性,存放人名。例如target_name[target[i]]就是第i张脸的名字
images属性,images是一个列表,每个元素是一个图像,也就是一个矩阵。可以用imshow(images[i])显示的i张脸的图像。这里images的shape为(1348, 62, 47)的,说明有1348张图,每张图是62*43的矩阵
data属性:就是把images属性的每个矩阵变成一行数据,用于训练。所以data属性的shape是(1348, 2914)
三:参数的选择
1.GridSearchCV:用法如下,用于参数的选择
from sklearn.model_selection import GridSearchCV param_grid = {'svc__C': [1, 5, 10], 'svc__gamma': [0.0001, 0.0005, 0.001]} grid = GridSearchCV(model, param_grid) grid.fit(Xtrain, ytrain) print(grid.best_params_)
属性best_params_: 最好的参数
属性best_estimator:最好的参数对应的训练模型。
2.pandas的notnull函数可以找到特定特征非空的样本,例如data是一个数据表,column是某一列, data_new = data [ pd.notnull ( data [ column] ) ] 将筛选出所有的column不为空的样本并形成新数据表。
四:评估值
1.混淆矩阵
from sklearn.metrics import confusion_matrix from seaborn import heatmap c = confusion_matrix(y_test, y_predict) heatmap(data=c, annot=True, xticklabels=target_names, yticklabels=target_names) ax2.set_xlabel("predict") ax2.set_ylabel("true") plt.show()
2.平均绝对误差, 均方绝对误差:
五:特征工程
设data是DataFrame类型, feature是Series类型
1. data.info可以显示数据集信息,特征类型。
2. data.select_dtypes(include=['object'])可以选出相应类型为‘object'的特征,返回值是DataFram类型
data.select_dtypes(exclude=['object'])选出类型不为’object'的特征。
3. feature.skew()和feature.kurt()可分别计算特征的偏度和峰度
4.对特征取对数可以减小数据的偏度。
5. data[column_name].hist()可以画出每个特征的直方图分布,这里特征由column_name指定。
6. data[column_name].corr()加上sns.heatmap()可以以热度图的形式画出特征之间的相关性
7. feature.astype('category').cat.codes可以将object类型的特征编码为数值类型
8.如果你想去掉指定时间的行可以如下:先将形如‘2013-01-01’,类型为object的列转换成datetme类型,然后再比较。
注意这里使用了异或去掉指定行。
data['order_pay_date'] = pd.to_datetime(data['order_pay_date']) data2 = data[(True^data['order_pay_date'].isin(['2013-11-11']))]