我的数据集中有一个功能,我想将其分为高或低。数据集本身包含34个特征,我想分类为高或低的特征是一个数字,位于最后一列,标记为"绝对向上移动"。我无法复制和粘贴整个数据集,因为它有28000多个观测值,包含34个特征。我将粘贴最后8列和前22行
medianchildincome parentincomep75 childincomep75 parentincomep90 childincomep90 parentincomep99 childincomep99 absoluteupwardmobility
31900 87700 62100 121600 90400 227400 158000 38.4
31900 87700 62100 121600 90400 227400 158000 38.4
31900 87700 62100 121600 90400 227400 158000 38.4
31900 87700 62100 121600 90400 227400 158000 38.4
31900 87700 62100 121600 90400 227400 158000 38.4
31900 87700 62100 121600 90400 227400 158000 38.4
31900 87700 62100 121600 90400 227400 158000 38.4
31900 87700 62100 121600 90400 227400 158000 38.4
31900 87700 62100 121600 90400 227400 158000 38.4
30200 90500 59500 135600 93900 444500 194500 39.6
30200 90500 59500 135600 93900 444500 194500 39.6
30200 90500 59500 135600 93900 444500 194500 39.6
30200 90500 59500 135600 93900 444500 194500 39.6
30200 90500 59500 135600 93900 444500 194500 39.6
30200 90500 59500 135600 93900 444500 194500 39.6
30200 90500 59500 135600 93900 444500 194500 39.6
30200 90500 59500 135600 93900 444500 194500 39.6
30200 90500 59500 135600 93900 444500 194500 39.6
22400 60800 44600 105600 75800 235700 153400 36.1
22400 60800 44600 105600 75800 235700 153400 36.1
22400 60800 44600 105600 75800 235700 153400 36.1
请注意,绝对向上流动性各不相同:38.4、39.6、36.1等。绝对向上移动性的值范围为23.7至63.8。我想写一个算法,学习将这些数字分为高还是低。很明显,63.8分会被归类为高,23.7分会被分类为低,但我不知道该把39.6分归类为什么?我会写一个线性阈值单位算法吗?我想把绝对向上移动特征转换成一个分类变量,它表示高或低,而不是数值,但我不知道从哪里开始。
到目前为止,我只有:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# Read csv file
df = pd.read_csv('raw_data_for_project2.csv')
y = df[['absoluteupwardmobility']] # Get last column
X = df[df.columns.difference(['absoluteupwardmobility'])] # X includes columns 0,1,2,...,33
首先绘制该列的直方图,并确定它是什么样的分布。如果它是正态分布N(mu, sigma)
,则可以将高于mean + n * sigma
的任何东西归类为高,其中西格玛是标准差,n
是您选择的因子,例如n=2或3是流行的选择。
对于学习部分,你可以制作一个算法,从一组给定的高/低分类中学习乘数应该是多少,以匹配"高"one_answers"低"的普遍接受范围。