机器学习本周讲的是线性回归、逻辑回归
原理见上一篇博客:https://www.cnblogs.com/bugutian/p/11123484.html
课程资料:https://github.com/GreedyAIAcademy/Machine-Learning
线性回归
其他的前面都学了,新的知识
1. 可以使用tushare爬取股票代码
import tushare as ts
df = ts.get_hist_data('000001')
print(df)
df.to_csv('000001.csv')
2. 零散的小知识
plotly.graph_objs : 可画股票的K线图
np.shape(df) 矩阵又多少行多少列如(611,14)
reshape() 将多维数组编程一维数组
df['label'] = df['close'].shift(-num) 用shift将结果上移num条记录
逻辑回归
逻辑回归的操作步骤
- 步骤1:分析数据
- 步骤2:数据预处理
- 步骤3:训练模型进行预测
分析数据
分析数据的字段,确定那些因素是良好的预测因素
数据预处理
- 缺失数据处理
- 删除: 缺失数据少时删除行,缺失数据多时删除列
- 取平均值: 用平均值代替缺失值
- 取中位数: 用中位数代替缺失值
到底选用中替代方法,不能排脑袋决定,选哪种方法,主要看哪种可能和结果关联度大
- 过采样
如果数据不平衡,如y=0的数据量是y=1数据量的10倍,此时需要用到过采样,过采样的结果使二元结果的数据量为1:1.
训练模型进行预测
都一样。
logreg = LogisticRegression()
logreg.fit(os_data_X, os_data_y.values.reshape(-1))
y_pred = logreg.predict(X_test)
logreg.score(X_test, y_test)
作业题
1. 处理其他数据的方法
由于其他数据只是缺失1两条信息,因此将这些数据删除
data = data.dropna()
data.isnull().sum()
2. 过采样处理
from imblearn.over_sampling import SMOTE
os = SMOTE(random_state=0)
columns = X_train.columns
os_data_X,os_data_y=os.fit_sample(X_train, y_train)
os_data_X = pd.DataFrame(data=os_data_X,columns=columns )
os_data_y= pd.DataFrame(data=os_data_y,columns=['survived'])
# we can Check the numbers of our data
print("过采样以后的数据量: ",len(os_data_X))
print("未生还数: ",len(os_data_y[os_data_y['survived']==0]))
print("生还数: ",len(os_data_y[os_data_y['survived']==1]))
print("未生还的百分比: ",len(os_data_y[os_data_y['survived']==0])/len(os_data_X))
print("生还的百分比: ",len(os_data_y[os_data_y['survived']==1])/len(os_data_X))
```python
### 3. 训练和预测
```python
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
logreg = LogisticRegression()
logreg.fit(os_data_X, os_data_y.values.reshape(-1))
y_pred = logreg.predict(X_test)
print("准确率为 %2.3f" % accuracy_score(y_test, y_pred))
准确率为 0.794
4. 不过采样结果
logreg2 = LogisticRegression()
logreg2.fit(X_train, y_train)
y_pred2 = logreg2.predict(X_test)
print("准确率为 %2.3f" % accuracy_score(y_test, y_pred2))
准确率为 0.817
可见过采样之后的准确率不一定高。