我正在使用one_hot
中的mltools
函数将2个变量的熔融数据帧转换成一个宽数据帧,其中每个变量(除索引外)都是一个因子水平。
在熔融框架中有25,000行,只有2个变量-一个是800级的因子,另一个是索引,所以我可以在以后合并。
我将使用各种机器学习包,因此需要以可接受的方式表示800个因子水平。
但是,当我使用one_hot
时,我得到了一个包含801列的框架,这是正确的(800个因子水平+ 1个索引)。但我仍然有25,000行。索引中以唯一值表示的原始观测值的数量为1,000。
所以,我的问题是-最佳做法是,每一个热变量每行仅具有一个正值吗?现在将其折叠起来是否有缺点,所以每一行都是一个观察值?
谢谢。
答案 0 :(得分:1)
我将根据您提供的信息回答问题。
您基本上拥有一个变量(具有800个水平的因子变量,由import sqlite3
import sys
def login():
while True:
username = input("Please enter your username: ")
password = input("Please enter your password: ")
with sqlite3.connect("wtf.db") as db:
cursor = db.cursor()
find_user = ("SELECT * FROM user WHERE username=? AND password=?")
cursor.execute(find_user, [(username), (password)])
results = cursor.fetchall()
if results is True:
for i in results:
print("Welcome "+i[1])
break
else:
print("Username and password not reconized or registered")
again = input("Do you want to try again?(y/n) ")
if again.lower() == "n":
print("bye")
sys.exit()
login()
表示的 25,000个索引观测值(由id
表示) )。您可以做的是:
val
)group_by()
)freq = n()
软件包确实非常有用)这将使您没有索引,但是有一个 2 x 801表,其中包含每个一个热点变量(列1: 800)及其频率(在第801列中)。许多框架可以很好地处理此类数据,但是如果没有更多信息,就不可能专门回答。
mltools
> str(result)
Classes ‘data.table’ and 'data.frame': 800 obs. of 801 variables:
$ val_AAL5 : int 1 0 0 0 0 0 0 0 0 0 ...
$ val_ABP14: int 0 1 0 0 0 0 0 0 0 0 ...
$ val_ACQ8 : int 0 0 1 0 0 0 0 0 0 0 ...
$ val_ADU8 : int 0 0 0 1 0 0 0 0 0 0 ...
$ val_AEB16: int 0 0 0 0 1 0 0 0 0 0 ...
$ val_AEX17: int 0 0 0 0 0 1 0 0 0 0 ...
$ val_AGQ4 : int 0 0 0 0 0 0 1 0 0 0 ...
$ val_AHS8 : int 0 0 0 0 0 0 0 1 0 0 ...
$ val_AHV2 : int 0 0 0 0 0 0 0 0 1 0 ...
$ val_AHX16: int 0 0 0 0 0 0 0 0 0 1 ...
$ val_AIV19: int 0 0 0 0 0 0 0 0 0 0 ...
...
df <- df %>%
group_by(val) %>%
summarise(freq = n())
dt <- as.data.table(df)
result <- one_hot(dt)